Jetpack AndroidX测试“编写一次,到处运行”-但是,到处运行的最佳方法是什么?

最近,我展示了一个有关androidX测试的Google IO视频,其中引用了“一次编写,在EveryWhere运行”。这让我很兴奋地学习androidX测试库。

我发现,经过很长一段时间,谷歌想出了一个不错的单一库,用于开/关设备的单元测试和仪器测试。但是我发现在设备上运行相同的测试有些困难。

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

这是我的问题。

  

如何在不将代码移至其他源根目录的情况下无缝地在设备上执行相同的测试?

lanfare321 回答:Jetpack AndroidX测试“编写一次,到处运行”-但是,到处运行的最佳方法是什么?

默认情况下,Android Gradle插件仅编译src/test/java/中的本地单元测试代码。因此,您需要如下所述为sharedTest文件夹定义运行配置。

  • 使用“ 编辑运行/调试配置”对话框来定义运行配置。

enter image description here

enter image description here

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

仅此而已,现在单击“应用”和“确定”。然后从运行按钮附近的下拉菜单中选择该配置,然后单击运行。

  

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

本文链接:https://www.f2er.com/2970599.html

大家都在问