参数化的多层套房

时间:2015-10-29 17:10:56

标签: java junit parameterized

我目前有一个抽象的BaseTest类,它包含几个通用的@Test

public abstract class BaseTest {

    private String expected;
    private String actual;

    public BaseTest(String expected, String actual) {
        this.expected = expected;
        this.actual = actual;
    }

    public String methodToTest(String line) {
        return line.trim();
    }

    @Test
    public void testNull() {
        assertNull(methodToTest(null));
    }

    // more @Tests...
}

SomeTest扩展BaseTest,我定义了各种测试用例。

@RunWith(Parallelized.class)
public class SomeTest extends BaseTest {
    // @Parameters (test cases) goes here...
}

我有许多扩展BaseTest的测试,然后我将其放入Suite中的RunAllTests

@RunWith(Suite.class)
@SuiteClasses({ SomeTest.class, AnotherTest.class, etc... })
public class RunAllTests { }

所以我想说我想添加更多@Test,但我希望将它们包含在另一个类中。

public class WhitespaceTest extends BaseTest {

    public WhitespaceTest(String expected, String actual) {
        super(expected, actual);
    }

    @Test
    public void testNewline() {
        assertEquals(expected, methodToTest(actual + "\n"));
    }

    // more @Tests...
}

看来我需要Suites的另一个“图层”来运行每一个测试,因此对于RunAllTests中的每个类,我运行BaseTest AND WhitespaceTest。我该如何实现这一层?

1 个答案:

答案 0 :(得分:1)

这是我当前(天真)解决此问题的方法:

BaseTest内:

@Test
public void testNewline() {
    WhitespaceTest wt = new WhitespaceTest(expected, actual);
    wt.testNewline();
}

这很有用,但是有很多重复的代码。对于@Test中的每个WhitespaceTest,您必须在@Test中创建另一个BaseTest