繁体   English   中英

Jetpack AndroidX 测试“一次编写,随处运行”——但在任何地方运行的最佳方式是什么?

[英]Jetpack AndroidX Test "Write Once, Run Everywhere" - But What is the best way to run Everywhere?

最近我展示了一个关于 androidX 测试的谷歌 IO 视频,其中引用了“一次编写,到处运行”。 这让我很高兴了解 androidX 测试库。

我发现经过很长时间谷歌为开​​/关设备的单元测试和仪器测试提出了很好的单一库。 但是我发现在开/关设备上运行相同的测试有些困难。

基本上在 Android 中,我们创建了两个源根test/javaandroidTest/java ,分别存储单元测试和仪器测试。 单元测试在 JVM 上运行,仪器在设备/模拟上运行。

然后我为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 上运行它。

我的问题来了。

如何在不将代码移动到不同的源根目录的情况下无缝地打开/关闭设备执行相同的测试?

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

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

在此处输入图片说明

在此处输入图片说明

  • 从模板中选择“Android Junit”
  • 在那里设置以下内容
    • “测试种类”到“目录中的全部”
    • “分叉模式”到“班级”
    • 使用文件选择器窗口将“目录”添加到您的 sharedTest 路径。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM