微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在没有命令行的情况下以及从套件中使用类参数运行整个 Espresso 测试类

如何解决如何在没有命令行的情况下以及从套件中使用类参数运行整个 Espresso 测试类

因此,我的应用程序中的每个 Activity 都有单独的纵向和横向布局文件,并且我使用 Espresso 来测试每个 Activity 的 UI。因为我为每个 Activity 有 2 个布局文件,所以我想在每个方向上运行一组相同的测试,以便我可以测试每个布局文件。天真的方法是复制每个测试类,为每个测试类创建一个横向版本,在@Before 中将方向更改为横向。这样做会产生大量重复代码。我觉得必须有更好的方法来实现这一目标。此外,我希望能够通过 2 个不同的测试套件运行相同的测试类,因此我可以轻松地以纵向和横向同时运行所有测试类。最好只在代码中完成,而不使用命令行。您可以更好地了解我在下面要实现的目标。附带说明一下,我考虑过将每个 @Test 的测试逻辑封装在一个单独的方法中,并从父方法调用它两次,在两者之间旋转屏幕,但这似乎有点笨拙和丑陋。

第一部分:我希望能够做这样的事情。如果需要,使用参数的认值执行此操作将允许在没有测试套件的情况下运行类:

@RunWith(AndroidJUnit4::class)
@LargeTest
class TestClass(val orientation: Int = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT) {

    /*blah blah blah*/

    @Before
    fun setorientation() {
        // set orientation here using orientation parameter
        // I already kNow how to set the orientation,this is not what I'm asking
    }

    /*blah blah blah*/
}

添加类似上面的参数会导致以下错误

java.lang.RuntimeException: Failed to instantiate test runner class androidx.test.internal.runner.junit4.AndroidJUnit4ClassRunner

第二部分:此外,我目前正在使用套件,只需单击一下即可运行所有 UI 测试,如下所示:

@RunWith(Suite::class)
@Suite.SuiteClasses(
    Test1::class,Test2::class,Test3::class,Test4::class
)
class TestSuite

理想情况下,我将能够创建 2 个套件类来运行我的所有应用程序。一张是人像,一张是风景。这些套件类将能够将参数传递给每个测试类,如下所示:

@RunWith(Suite::class)
@Suite.SuiteClasses(
    Test1(orientation),Test2(orientation),Test3(orientation),Test4(orientation)
)
class TestSuite

我试过在线搜索,但我绝对找不到任何关于此的信息。我真的很想避免重复我的所有测试类或做一些不雅的事情,只是为了实现一些可以通过简单参数轻松处理的东西。有没有办法做到这一点?

谢谢。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。