我正在实施一些unit testing在我的应用程序,我有一个依赖于依赖于Application上下文。 该依赖返回一个Item列表,但我想嘲笑该逻辑返回任何我想要的。 我已经知道的区别: a) when(foo.method1()).return(bar) b) doReturn(bar).when(foo).method1() (b)不应调用该方法。 现在我有一个在ItemHelper.kt调用的方法: fun retrieveItems(): MutableList { val boxStore = BoxStore.getInstance().getBoxFor(Item::class.java) return boxStore.all } 而.getInstance()依赖于Application 。 既然我想嘲笑它,这是我的考验: class ItemHelperTests { @JvmField @Rule var mockitoRule = MockitoJUnit.rule()!! @Mock private lateinit var itemHelper: ItemHelper @Test fun itemsNumber_Test() { Mockito.doReturn(ArrayList()).`when`(itemHelper).retrieveItems() System.out.println(“this line is unreachable”) } } 但是结束调用我的代码: java.lang.Exception: Please init BoxStore.boxStore […]
如何才能做一个简单的测试在Android的领域数据库在Kotlin实施测试? 我试图从github上的java realm test中将一个片段调整为kotlin,并得到下一个代码: import io.realm.Realm import io.realm.log.RealmLog import org.hamcrest.CoreMatchers import org.junit.Assert import org.junit.Test import org.junit.Before import org.junit.Rule import org.mockito.Mockito.`when` import org.powermock.api.mockito.PowerMockito import org.powermock.modules.junit4.rule.PowerMockRule class DBTest { @Rule var rule = PowerMockRule() lateinit internal var mockRealm: Realm @Before fun setup() { PowerMockito.mockStatic(RealmLog::class.java) PowerMockito.mockStatic(Realm::class.java) val mockRealm = PowerMockito.mock(Realm::class.java) `when`(Realm.getDefaultInstance()).thenReturn(mockRealm) this.mockRealm = mockRealm } @Test fun shouldBeAbleToGetDefaultInstance() […]
我试图用一些Kotlin代码和Java代码来使用Butterknife。 我知道在M12之前,ButterKnife需要注释处理的支持是不好的或者根本不支持。 所以我把我的活动保持在Java中。 至少在Java中使用Butterknife 6.x和preM12 Kotlin。 我现在正在用M13和M14尝试butterknife 7.x。 它应该有注解处理支持,但它不适合我。 bind()函数不会绑定用Java编写的适配器中的任何内容,也不会用Kotlin编写的活动。 我在build.gradle中使用这个(在Github上试过最新版本): apply plugin: ‘com.neenbedankt.android-apt’ dependencies { provided files(‘libs/butterknife-annotations.jar’) kapt files(‘libs/butterknife-compiler-8.0.0-SNAPSHOT.jar’) compile ‘com.jakewharton:butterknife:8.0.0-SNAPSHOT@aar’ } 这不会编译。 我也尝试编译“com.neenbedankt.android-apt”,但绑定不起作用。 我知道那里可能还没有支持butterknife 。 但有没有什么破解得到它的工作?
我正在使用Room数据库,试图在我的Dao中写入一个查询,这将删除比特定天数更早的所有记录。 这是我来到: @Query(“DELETE FROM my_table WHERE dateFrom <= date('now','-:days day')") fun deleteAllOlderThan(days: Int) 但是,当我尝试构建我的项目时,在我的Gradle控制台中出现错误: 错误:未使用的参数:天 我正在使用Kotlin,所以它也告诉我这个: 错误:任务’:nexo:kaptDebugKotlin’的执行失败。 内部编译器错误。 查看日志了解更多详情 我的查询有什么问题? UPDATE 我也收到有关转换日期的错误。 这是我的转换器: class Converter { @TypeConverter fun fromTimestamp(value: Long?) = value?.let { Date(it) } @TypeConverter fun dateToTimestamp(date: Date?) = date?.time } 我也将其添加到我的数据库与注释: @TypeConverters(Converter::class) 这是我得到的具体错误: 无法弄清楚如何将这个字段保存到数据库中。 你可以考虑为它添加一个types转换器。 e:e:private final java.util.Date dateFrom = null; 概要 我试图使用密封类的转换器在房间里,它会导致问题,所以我决定保持我的日期参数为长。 […]
我目前正在用Android Studio 3(Canary)在Kotlin上构建一个原生的Android应用程序。 我也在使用Firebase实时数据库和Firebase身份validation。 这是我的gradle依赖: dependencies { compile fileTree(dir: ‘libs’, include: [‘*.jar’]) androidTestCompile(‘com.android.support.test.espresso:espresso-core:2.2.2’, { exclude group: ‘com.android.support’, module: ‘support-annotations’ }) compile ‘com.android.support:appcompat-v7:25.3.1’ compile ‘com.android.support:design:25.3.1’ compile ‘com.android.support.constraint:constraint-layout:1.0.2’ compile ‘com.squareup.picasso:picasso:2.5.2’ compile ‘com.google.firebase:firebase-database:11.0.4’ compile ‘com.google.firebase:firebase-auth:11.0.4’ compile ‘com.dlazaro66.qrcodereaderview:qrcodereaderview:2.0.2’ compile ‘com.android.support:support-v4:25.3.1’ compile ‘com.android.support:recyclerview-v7:25.3.1’ compile ‘com.firebaseui:firebase-ui-database:2.0.1’ testCompile ‘junit:junit:4.12’ compile “org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version” } 一切正常,直到与我的Firebase数据库通信停止完成。 我没有得到任何错误,但是我注册的所有听众都没有被触发。 例如: val ref = FirebaseDatabase.getInstance().reference.child(“message”) ref.setValue(“Test”, object: DatabaseReference.CompletionListener […]
总之我的问题是我不能在Kotlin编写的活动中使用GlideApp(生成的API)。 有趣的是,Android Studio看到的引用,我可以打开生成的GlideApp,有代码完成,但是当我尝试构建它,然后失败,“未解析的引用:GlideApp” 滑翔模块在java中实现,因为大部分的应用程序是用java编写的。 任何想法?
我正试图在斯佩克的灯光中find我的头。 文档中的计算器示例很容易遵循,但是我不确定如何在构建安装/拆卸时执行某些固定设备。 例如,如果我正在测试一个列表: describe(“a list”) { val list = arrayListOf() // Only instantiated once on(“adding an item”) { list.add(123) it(“has a size of one”) { list.size.should.equal(1) } } on(“adding 2 items”) { list.add(1) list.add(2) it(“has a size of 2”) { list.size.should.equal(2) // Fails, 3 != 2 } } } 据我所知,在Spek中, describe块只被评估一次,所以只有一个List实例。 该文档有助于建议使用测试装置,但无助于举一个例子! 我认为以下方法是行不通的,因为Kotlin不了解Spek之前一定会on beforeEachTest之前调用 describe(“a […]
编辑2016年3月1日:公平的警告:这个问题被问到1.0.0之前的Kotlin。 从Kotlin 1.0.0开始,情况就不一样了。 请参阅下面的@Jayson Minard的Kotlin 1.0.0答案。 在使用Stream的Java 8代码中,我写了类似的东西 public static void main(String… args) { Stream integerStream = Stream.of(1,2,3); List integerList = integerStream.collect(Collectors.toList()); } 但是在Kotlin编写的类似代码中,我得到了意想不到的结果。 public fun main(args: Array) { val integerStream : Stream = Stream.of(1, 2, 3) // this is what I expect to write, like the Java 8 code, but is a compilation error: […]
val adapter = FirebaseRecyclerAdapter( Discount::class.java, R.layout.fragment_main_day_item, Holder::class.java, FirebaseDatabase.getInstance().getReference() ) { override fun populateViewHolder(holder: Holder, dis: Discount, pos: Int){ } } 文档在这里 我如何使用Kotlin来处理这个问题 编辑 val mAdapter = object : FirebaseRecyclerAdapter( Chat::class.java, R.layout.fragment_main_day_item, ChatHolder::class.java, ref) { public override fun populateViewHolder(holder: ChatHolder, chat: Chat, position: Int) { } } 我把java转换成了kotlin,它可以工作。
所以我对Dagger很陌生,试图通过活动加上独立片段和独立导航来“Kotlin”MVP项目的“daggerify”。 事实上,我使用基于支持lib的Fragment的好几个视图让我尝试最近的匕首Android支持function。 经过一些与构件图构建挣扎后,我遇到了这个错误代表的问题: e: …\MyApp\app\build\tmp\kapt3\stubs\debug\com\…\di\app\MyAppComponent.java:6: error: [dagger.android.AndroidInjector.inject(T)] android.support.v4.app.FragmentManager cannot be provided without an @Provides- or @Produces-annotated method. e: e: public abstract interface MyAppComponent extends dagger.android.AndroidInjector { e: ^ e: android.support.v4.app.FragmentManager is injected at e: myapp.ui.common.BaseActivity.fragmentManager e: myapp.ui.main.MainActivity is injected at e: dagger.android.AndroidInjector.inject(arg0) e: java.lang.IllegalStateException: failed to analyze: org.jetbrains.kotlin.kapt3.diagnostic.KaptError: Error while annotation processing at org.jetbrains.kotlin.analyzer.AnalysisResult.throwIfError(AnalysisResult.kt:57) at […]