我最近看了一段关于AndroidX测试的Google IO视频,其中引用了“编写一次,到处运行”的口号。这让我对学习AndroidX测试库感到兴奋。
我发现,经过很长一段时间之后,谷歌推出了一个非常好的单一库,用于在开/关设备上进行单元测试和仪器测试。但我发现,在开/关设备上运行相同的测试存在一些困难。
基本上,在Android中,我们创建两个源目录test/java
和androidTest/java
,分别存储单元测试和仪器测试。单元测试在JVM上运行,而仪器测试在设备/模拟器上运行。
然后,我在test/java
目录下为一个Fragment编写了测试。
@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测试库。
我尝试过以下方法。在谷歌上搜索后,我发现我们需要创建
sharedTest/java
源根目录,使用下面的gradle命令,以使其无论在设备上还是离线都能运行。android {
...
sourceSets {
androidTest {
java.srcDirs += "src/sharedTest/java"
}
test {
java.srcDirs += "src/sharedTest/java"
}
}
}
将我的代码放入sharedTest/java
后,如果使用绿色运行图标执行测试,它总是要求使用设备。这也令人困惑,因为我永远无法在JVM上运行此测试。
接下来是我的问题。
如何在开关设备时无缝地执行相同的测试,而无需将代码移动到不同的源根目录?