android 使用RobolectricTest对某些测试进行参数化,但不对其他测试进行参数化

zy1mlcev  于 12个月前  发布在  Android
关注(0)|答案(1)|浏览(105)

我希望将参数化测试添加到使用Robolectric测试框架的现有测试套件中,如下所示:

@RunWith(RobolectricTestRunner.class)
public class SomeTest {
    /* ... Tons of tests */
}

其中一个测试是针对以前固定但现在需要参数的功能。This answer建议,为了以参数化的方式只运行一个测试,我应该添加@RunWith(Enclosed.class),然后将我想要参数化的测试 Package 在它自己的类中。不幸的是,似乎我必须选择 * 要么 * Enclosed.class * 或 * RobolectricTestRunner.class,而不是两者都选。
似乎有一个open issue on robolectric与此相关,但问题的答案似乎是将整个测试 Package 在@RunWith(Enclosed.class)中,然后将内部测试 Package 在一个带有@RunWith(RobolectricTestRunner.class)的类中。考虑到我只是在一个相当大的测试用例集中改变一个测试,我对将所有东西重构到一组内部类中的想法并不感到惊讶。
有没有办法让Robolectric测试运行器从一个更大的套件中参数化一个测试?

nlejzf6q

nlejzf6q1#

我也遇到了同样的问题,并通过以下方式使用 Enclosed 来做到这一点(代码是在Kotlin中):

@RunWith(Enclosed::class)
internal class WhateverTest {

    @RunWith(ParameterizedRobolectricTestRunner::class)
    internal class WhateverTestParametrized(private val parameter: ParameterType) {
        // parametrized tests
    }

    @RunWith(RobolectricTestRunner::class)
    internal class WhateverTestNotParametrized {
        // Not parametrized tests
    }
}

我知道你不想让测试有内部类,但这是我发现的让Robolectric测试运行器从junit 4中要求的更大的套件中参数化一个测试的唯一方法。

相关问题