我需要在一个单元测试类中使用多个设置。此外,我需要使用许多案例来测试方法。对于我来说,将参数化和理论运行器组合在一起是最自然的,例如:
@RunWith(ParameterizedTheories.class)
public class Tests {
Setup o;
@Parameters(name = "{index}: {0}")
public static Iterable<Object> data() {
return asList(new Object[][]{
asArray("First", Tests::setup1),
asArray("Second",Tests::setup2),
});
public Tests(String name, Setuper setuper) {
Setup o = setuper.setup();
}
@Theory
public void AddSevenTest(
@TestedOn(ints = {0, 5, 10})int x){
o.implementation.addSevenAnd(x);
verify(o.storageMock).save(x + 7);
}
static Setup setup1(){
// ...
}
static Setup setup2(){
// ...
}
interface Setuper {
Setup setup();
}
static class Setup {
IStorage storageMock;
ITesting implementation;
}
}
我没有找到任何用途。有什么能帮助我的吗?什么?
答案 0 :(得分:0)
通过仅使用现有的JUnit工具(类),但通过从JUnit Runner-s的层次结构中扩展其中一个类,无法实现。
此外,这个问题可以通过其他简单的以下方式解决:
@RunWith(Theories.class)
public class BaseTests {
protected Setup o;
@Before
public void setUp();
@Theory
public void AddSevenTest(
@TestedOn(ints = {0, 5, 10})int x){
o.implementation.addSevenAnd(x);
verify(o.storageMock).save(x + 7);
}
static class Setup {
IStorage storageMock;
ITesting implementation;
}
}
public class Tests1 extends BaseTests {
@Ovveride @Before
public void setUp() {
// ...
}
}
public class Tests2 extends BaseTests {
@Ovveride @Before
public void setUp() {
// ...
}
}
@RunWith(Suite.class)
@Suite.SuiteClasses({
Tests1.class,
Tests2.class
})
public class Tests {
}