kotlin测试android,java – Kotlin androidTest:测试跑完了.空的测试套件

我正在尝试将我的测试从java转换为kotlin.

简单的单元测试已成功翻译,如下所示:

class BindingUtilsTest {

@Test @Throws(Exception::class)

fun testConvertBooleanToVisibility_visible() {

assertEquals(BindingUtils.convertBooleanToVisibility(true), View.VISIBLE)

}

}

但是当我试图运行androidTest时,它失败并显示消息:“没有找到测试”和

Test running started

Tests ran to completion.

Empty test suite.

代码工作得很好,在java时.相关代码:

build.gradle部分:

apply plugin: "com.android.application"

apply plugin: "com.neenbedankt.android-apt"

// for tests

apply plugin: 'kotlin-android'

// defaultConfig

testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"

sourceSets {

test.java.srcDirs += 'src/test/kotlin' // tests are there

androidTest.java.srcDirs += 'src/androidTest/kotlin' // and there

}

// unit tests

testApt "com.google.dagger:dagger-compiler:${daggerVer}"

// kotlin

testCompile "org.jetbrains.kotlin:kotlin-stdlib:${kotlinVer}"

testCompile "org.jetbrains.kotlin:kotlin-test-junit:${kotlinVer}"

// android tests

androidTestApt "com.google.dagger:dagger-compiler:${daggerVer}"

// kotlin

androidTestCompile "org.jetbrains.kotlin:kotlin-stdlib:${kotlinVer}"

androidTestCompile "org.jetbrains.kotlin:kotlin-test-junit:${kotlinVer}"

简单测试:

@RunWith(AndroidJUnit4::class) class MainDrawerActivityTest {

private val mQuestions = InstrumentationRegistry.getTargetContext().applicationContext as Questions

private val mTestComponentRule = TestComponentRule(mQuestions,

DaggerAppComponentTest.builder().appModuleTest(AppModuleTest(mQuestions)).build(),

{ obj, component -> obj.setAppComponent(component) }, // set test component

{ objectToClear -> objectToClear.setAppComponent(null) }) // clear test component

private val mActivityTestRule = ActivityTestRule(

MainDrawerActivity::class.java, false, false)

// TestComponentRule needs to go first to make sure the Dagger TestComponent is set

// in the Application before any Activity is launched.

@Rule @JvmField val mRuleChain: TestRule = RuleChain.outerRule(mTestComponentRule).around(mActivityTestRule)

private var mActivity: MainDrawerActivity? = null

@Before @Throws(Exception::class)

fun setUp() {

mActivityTestRule.launchActivity(null)

mActivity = mActivityTestRule.activity

}

@Test @Throws(Exception::class)

fun testOnCreate() {

val size = mActivity!!.supportFragmentManager.fragments.size

// check if fragment instantly added

assertEquals(size.toLong(), 1)

}

}

测试组件在Kotlin中:

// Empty because extends ApplicationComponent

@Singleton @Component(modules = arrayOf(

AppModuleTest::class)) interface AppComponentTest : AppComponent

测试模块也在Kotlin中:

@Module class AppModuleTest(private val mApp: Questions) /*: AppModule*/ {

@Provides fun provideApp(): Questions {

return mApp

}

}

我甚至没有看到,DaggerAppComponentTest是构建的.

为什么我使用apt代替kapt进行测试?

因为我有一个错误,我不能混合apt和kapt在一个项目中.我试图切换到kapt,并得到了数十亿的错误.

据我所知,kapt处理kotlin文件并使用它们人们生成kotlin代码?而对于apt:java文件,java代码.怎么混合呢?如何解决这个问题呢?

接受的解决方案有效.在此之前,我为Kotlin回归了kapt.用kaptAndroidTest和kaptTest.

解决方法:

更改

@Rule @JvmField val mRuleChain: TestRule = RuleChain.outerRule(mTestComponentRule).around(mActivityTestRule)

@get:Rule @JvmField var mRuleChain: TestRule = RuleChain.outerRule(mTestComponentRule).around(mActivityTestRule)

如果它不起作用,则表示mRuleChain为null,检查Dagger提供的对象.

标签:java,android,kotlin,android-testing,dagger-2

来源: https://codeday.me/bug/20190702/1352872.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值