参数化的多层套房

bud*_*udi 10 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...
}
Run Code Online (Sandbox Code Playgroud)

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

@RunWith(Parallelized.class)
public class SomeTest extends BaseTest {
    // @Parameters (test cases) goes here...
}
Run Code Online (Sandbox Code Playgroud)

我有许多测试可以扩展BaseTest,然后我将其Suite放入RunAllTests.

@RunWith(Suite.class)
@SuiteClasses({ SomeTest.class, AnotherTest.class, etc... })
public class RunAllTests { }
Run Code Online (Sandbox Code Playgroud)

所以,假设我想添加更多@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...
}
Run Code Online (Sandbox Code Playgroud)

看来我需要另一个"层" Suites来运行每一个测试,所以对于每个类RunAllTests,我运行BaseTest AND WhitespaceTest.我该如何实现这一层?

bud*_*udi 1

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

之内BaseTest

@Test
public void testNewline() {
    WhitespaceTest wt = new WhitespaceTest(expected, actual);
    wt.testNewline();
}
Run Code Online (Sandbox Code Playgroud)

这可行,但有很多重复的代码。对于每个@Testin WhitespaceTest,您必须创建另一个@Testin BaseTest