当spek试图找到测试时,我正在崩溃。 我已经尝试了许多不同的版本和示例配置。 我正在从命令行运行。 Gradle 4.0,mac osx。 任何帮助将不胜感激! 这是错误: WARNING: TestEngine with ID 'spek' failed to discover tests java.lang.NoSuchMethodError: org.junit.platform.commons.util.ReflectionUtils.findAllClassesInClasspathRoot(Ljava/nio/file/Path;Ljava/util/function/Predicate;Ljava/util/function/Predicate;)Ljava/util/List; at org.jetbrains.spek.engine.SpekTestEngine.resolveSpecs(SpekTestEngine.kt:66) at org.jetbrains.spek.engine.SpekTestEngine.discover(SpekTestEngine.kt:50) at org.junit.platform.launcher.core.DefaultLauncher.discoverEngineRoot(DefaultLauncher.java:130) at org.junit.platform.launcher.core.DefaultLauncher.discoverRoot(DefaultLauncher.java:117) at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:90) at org.junit.platform.launcher.Launcher.execute(Launcher.java:96) at org.junit.platform.console.tasks.ConsoleTestExecutor.executeTests(ConsoleTestExecutor.java:65) at org.junit.platform.console.tasks.ConsoleTestExecutor.lambda$execute$0(ConsoleTestExecutor.java:57) at org.junit.platform.console.tasks.CustomContextClassLoaderExecutor.invoke(CustomContextClassLoaderExecutor.java:33) at org.junit.platform.console.tasks.ConsoleTestExecutor.execute(ConsoleTestExecutor.java:57) at org.junit.platform.console.ConsoleLauncher.executeTests(ConsoleLauncher.java:85) at org.junit.platform.console.ConsoleLauncher.execute(ConsoleLauncher.java:75) at org.junit.platform.console.ConsoleLauncher.execute(ConsoleLauncher.java:48) at org.junit.platform.console.ConsoleLauncher.main(ConsoleLauncher.java:40) 这里是我目前的build.gradle: buildscript { repositories { jcenter() maven { […]
创建一个测试用例来表示我正在尝试做什么。 我无法弄清楚如何“停止”继续在匿名函数中工作。 在下面的例子中,如果答案是正确的,我想跳出“苹果”部分。 下面的代码不能编译,因为它说的是返回@苹果而不是返回@香蕉这是唯一有效的选项,但我写下来试图解释我想要达到的目标,并更好地理解如何去做类似这个。 class FunctionBreakingTest { @Test fun stopInMiddleOfLambda() { var answer = "wrong" doStuff apple@ { doStuff banana@ { answer = "correct" if (answer == "correct") { return@apple } answer = "wrong" } answer = "wrong" } assertEquals("correct", answer) } private fun doStuff(foo: () -> Unit) = foo.invoke() }
给定一个包含以下(精简)类的Java库: public class Vector2f { public float x; public float y; public Vector2f div(Vector2f other) { x /= other.x; y /= other.y; return this; } public Vector2f div(Vector2f other, Vector2f dest) { dest.x = x / other.x; dest.y = y / other.y; return dest; } /* … */ } 由于kotlin自动将合适的方法名称转换为重载操作符,我可以写 val v0 = Vector2f(12f, 12f) […]
我有一种情况,通过获取一个Item对象,三件事情之一应该发生: 如果该项目不存在于缓存(又名为空)中,则从api1和api2加载数据,合并数据并返回一个Observable 。 如果该项目存在于缓存中,但缺少api2 ,则从api2加载数据,并将其与高速缓存中已有的数据合并 如果整个数据在缓存中可用,只需返回它。 到目前为止,这是我设法提出的最好的: val cacheObservable = cache.fetchItem(itemId); val api1Observable = api1.fetchItem(itemId); val api2Observable = api2.fetchItem(itemId); val resultObservable = cacheObservable!!.flatMap { item: Item? -> if (item == null) { /* Get the item data, and the full text separately, then combine them */ Observable.zip(api1Observable, api2Observable, { itemData, itemText -> itemData.apply { text […]
根据When Expression的文档,它可以代替“if-else if”,所以我试着实现一个函数来返回Any类型的两个变量的最大值: fun maxOf(a: Any, b: Any) = when { a is Int && b is Int -> if (a < b) b else a a is Double && b is Double -> if (a < b) b else a a is Int && b is Double -> if (a < b) b else […]
我有这样的JSON: { "apps": [ { "id": "1", … }, { "id": "2", … } ] } 例如说, Application类看起来像这样 data class Application( val id: String ) 我想将JSON反序列化为List<Application> ,其中每个{…}都是一个Application 。 我希望能够做到这一点,而不必创建一个类似Applications的包装类,用@JsonRootName对其进行@JsonRootName ,然后启用DeserializationFeature.UNWRAP_ROOT_VALUE 。 最终目标是有一个类似于以下内容的Retrofit界面: @GET("api/apps") fun listApplications(): Call<List<Application>> 我试图实现一个简单的JsonDeserializer (可能可以优化): class ApplicationListDeserializer : JsonDeserializer<List<Application>>() { companion object { private val COLLECTION_TYPE: CollectionType = TypeFactory.defaultInstance() .constructCollectionType(List::class.java, Application::class.java) } […]
在下面的代码中,我想显示空的视图,如果旅行是空的,然后返回并避免运行下面的代码,但编译器说:“返回不允许在这里”。 mainRepo.fetchUpcomingTrips { trips -> if (trips.isEmpty()) { showEmptyViews() return } // run some code if it's not empty } 有没有办法像那样回报? 我知道我可以把它放在一个if else块中,但是如果有其他情况,我讨厌写作,当我有更多的条件的时候,我不太理解/可读。
我有这个日期字符串: 2016-04-26T09:14:10.477Z在UTC时区。 我想将它转换为用户本地时区,所以如果是格林尼治标准时间+02:00,我想要一个值为2016-04-26T11:14:10.477Z (注意到9的变化为11)。 我一直在使用这个: val sdf = SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS", Locale.getDefault()) val now = Date() val limit = sdf.parse(coupon.usedAt) 这里limit = Tue Apr 26 09:14:10 GMT+02:00 2016这是不正确的,我想。 那么我怎样才能正确地转换它? 谢谢! 编辑:我的问题不同于这一个 ,因为我需要使用对象SimpleDateFormat而不是Date之一
我无法找到如何使用Kotlin语言获得像String一样的变量(或常量)类型,如typeof(variable) 。 如何做到这一点?
有没有人能够得到测试运行在Android Studio(从GUI而不是终端),我一直无法从GUI运行测试。 每次尝试通过GUI运行测试时,我都会收到以下消息: 我能够使用以下命令从终端运行测试: ./gradlew connectedAndroidTest 我在Mac OSX上运行Android Studio 0.5.2,使用Gradle 1.11和Plugin 0.9.0 我的项目结构如下; MyProject/ src/ androidTest/ java/ com.myproject.app.test/ … (tests source code) … main/ java/ com.myproject.app/ … (source code) … res/ … (resources code) … build.gradle 我的build.gradle文件看起来类似于以下内容: … android { compileSdkVersion 19 buildToolsVersion "19.0.1" defaultConfig { versionCode 12 versionName "2.0" minSdkVersion 9 targetSdkVersion 19 testPackageName […]