将JUnit测试动态添加到测试类

Emi*_*ily 6 java junit junit4

我发现自己现在正在编写大量的锅炉板测试,我希望以一种干净的方式优化掉许多这些基本测试,这些测试可以添加到所有当前的测试类中,而不会有太多麻烦.

这是一个基本的测试类:

class MyClassTest {

    @Test
    public void doesWhatItDoes() {
        assertEquals("foo",new MyClass("bar").get());
    }

}
Run Code Online (Sandbox Code Playgroud)

让我们说如果MyClass实现了Serializable,那么我们希望确保它确实可以序列化.所以我构建了一个可以扩展的类,其中包含一组标准测试,这些测试将与其他测试一起运行.

我的问题是,如果MyClass没有实现Serializable,我们仍然在类中进行序列化测试.我们可以使它成功用于非可序列化的类,但它仍然坚持在测试列表中,一旦这个类开始构建它将变得越来越混乱.

我想要做的是找到一种方法来动态添加那些与现有测试类相关的测试.我知道其中一些可以通过TestSuit完成,但是你必须为每个类维护两个测试类,这很快就会变成麻烦.

如果有人知道这样做的方法,不需要eclipse插件或类似的东西,那么我将永远感激.

编辑:添加了我上面描述的简短示例;

class MyClassTest extend AutoTest<MyClass> {

    public MyClassTest() {
        super(MyClass.class);
    }

    @Test
    public void doesWhatItDoes() {
        assertEquals("foo",new MyClass("bar").get());
    }

}

public abstract class AutoTest<T> {
    private final Class<T> clazz;
    protected AutoTest(Clazz<T> clazz) {
        super();
        this.clazz = clazz;
    }

    @Test
    public void serializes() {
        if (Arrays.asList(clazz.getInterfaces()).contains(Serializable.class)) {
        /* Serialize and deserialize and check equals, hashcode and other things... */
        }
    }
}
Run Code Online (Sandbox Code Playgroud)