用例如下,我希望能够将参数化和非参数化测试结合起来,并为不同的参数化测试提供不同的参数。
使用Parameterized.class似乎有点过分,因为这会炸掉我需要参数化的每个新单元测试的构造函数,也会导致我不感兴趣的非参数化测试的多次运行。
所以我在考虑Theories.class,但是虽然可以提供多个@DataPoint
,但这些是指作为每个参数传递给测试函数的各个类型,并且仍然只导致测试一个函数。 / p>
我想实现像
这样的东西@RunWith(Theories.class)
class Test{
@Theory(named="foo")
public void fooTest(Object input) {
}
public static @DataPoints(named="foo") Object[] inputs = {1, 2, 3, 4, 5};
@Theory(named="bar")
public void barTest(Object input) {
}
public static @DataPoints(named="bar") Object[] inputs = {6, 7, 8, 9, 10};
public void bazTest() {
}
}
fooTest
分别使用1, 2, 3, 4, 5
和barTest
6, 7, 8, 9, 10
进行测试。
有没有办法使用Theory
来实现这一目标?有没有替代方案来实现这一目标?
答案 0 :(得分:1)
你不能将测试风格与Theories runner混合使用。但是可以以这种方式使用某些第三方参数化运行程序,例如JUnitParams。
e.g
@RunWith(JUnitParamsRunner.class)
public class PersonTest {
@Test
@Parameters({"17, false",
"22, true" })
public void personIsAdult(int age, boolean valid) throws Exception {
assertThat(new Person(age).isAdult(), is(valid));
}
@Test
public void lookNoParams() {
etc
}
}
答案 1 :(得分:0)