java - 参数化多层套件

标签 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 的测试,然后我将其放入 RunAllTestsSuite 中。

@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。我该如何着手实现这一层?

最佳答案

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

BaseTest 中:

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

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

关于java - 参数化多层套件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33420561/

相关文章:

java - LinkedBlockingQueue 的插入和删除方法是线程安全的吗?

java - Java 中 .class 文件的用途

java - 运行java参数化类给出错误

c# - 应用参数后查看查询的方法?

java - 如何使用 Junit 和超时获得成功?

AndroidJUnit4 和参数化测试

java - 使用BufferedReader输入字符

java - 如何在我的扫描器之前调用 GUI 代码?

java - 如何使用 JUnit/Ant 加载属性文件?

unit-testing - 可以使用 mockito 模拟抽象类吗?