最近,我展示了一个有关androidX测试的Google IO视频,其中引用了“一次编写,在EveryWhere运行”。这让我很兴奋地学习androidX测试库。
我发现,经过很长一段时间,谷歌想出了一个不错的单一库,用于开/关设备的单元测试和仪器测试。但是我发现在设备上运行相同的测试有些困难。
基本上,在Android中,我们创建两个源根test/java
和androidTest/java
,分别在其中存储单元测试和仪表测试。单元测试在JVM上运行,而Instrumentation在设备/模拟上运行。
然后我为test/java
目录中的一个片段编写了测试。
@RunWith(AndroidJUnit4::class)
class MyFragmenTest {
lateinit var scenario: FragmentScenario<MyFragment>
@Before
fun setUp() {
scenario = launchFragmentInContainer<MyFragment>()
}
@Test
fun `sample test`() {
scenario.onFragment {
// something
}
// some assertion
}
}
因此,当我使用绿色小运行图标执行此测试时,它在没有仿真器的JVM中运行了此测试,效果很好。但是要在设备上运行相同的测试,我必须将此代码androidTest/java
的源根目录移开。
基本上,我知道当我们使用androidX测试库时,您不必依靠其他工具和库来完成相同的工作就可以运行相同的测试。
我尝试过的事情。
之后,在Google上搜索时,我发现我们必须使用下面的gradle行创建sharedTest/java
源根目录,以便它可以在设备上或设备上运行。
android {
...
sourceSets {
androidTest {
java.srcDirs += "src/sharedTest/java"
}
test {
java.srcDirs += "src/sharedTest/java"
}
}
}
将代码放入sharedTest/java
后,如果我使用绿色运行图标执行测试,它将始终要求设备。这也令人困惑,因为我永远无法在JVM上运行它。
这是我的问题。
如何在不将代码移至其他源根目录的情况下无缝地在设备上执行相同的测试?