喷气背包 AndroidX 测试 "一次编写,到处运行" - 但是什么是最佳的到处运行方式?

8

我最近看了一段关于AndroidX测试的Google IO视频,其中引用了“编写一次,到处运行”的口号。这让我对学习AndroidX测试库感到兴奋。

我发现,经过很长一段时间之后,谷歌推出了一个非常好的单一库,用于在开/关设备上进行单元测试和仪器测试。但我发现,在开/关设备上运行相同的测试存在一些困难。

基本上,在Android中,我们创建两个源目录test/javaandroidTest/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上运行此测试。

接下来是我的问题。

如何在开关设备时无缝地执行相同的测试,而无需将代码移动到不同的源根目录?

1个回答

1
Android Gradle插件默认只编译位于`src/test/java/`目录下的本地单元测试代码。因此,您需要根据以下说明为sharedTest文件夹定义运行配置。
  • 使用“编辑运行/调试配置”对话框来定义运行配置。

enter image description here

enter image description here

  • 从模板中选择“Android Junit”
  • 设置以下内容:
    • 将“测试类型”设置为“目录中的所有内容”
    • 将“分叉模式”设置为“类”
    • 使用文件选择器窗口,将“目录”设置为您的sharedTest路径。

就这样,现在点击“应用”和“确定”。然后从运行按钮附近的下拉菜单中选择该配置,并单击运行。

注意:您可以创建任意数量的配置,并使用左侧绿色三角形运行按钮旁边的下拉菜单轻松切换它们。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接