Динамическое добавление тестов JUnit в тестовый класс

В наши дни я пишу много-много шаблонных тестов, и я хочу оптимизировать многие из этих базовых тестов таким образом, чтобы их можно было добавить ко всем текущим тестовым классам без особых хлопот.

Вот базовый тестовый класс:

class MyClassTest {

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

}

Допустим, если MyClass реализует Serializable, тогда понятно, что мы хотим убедиться, что он действительно сериализуемый. Итак, я создал класс, который вы можете расширить, который содержит набор стандартных тестов, которые будут выполняться вместе с другими тестами.

Моя проблема в том, что если MyClass НЕ реализует, например, Serializable, у нас все еще есть тест сериализации в учебный класс. Мы можем сделать это просто успешным для несериализуемых классов, но он все еще остается в списке тестов, и как только этот класс начнет строиться, он будет все больше и больше загромождаться.

Я хочу найти способ динамически добавлять те тесты, которые имеют отношение к уже существующим тестовым классам, где это необходимо. Я знаю, что кое-что из этого можно сделать с помощью TestSuit, но тогда вам придется поддерживать два тестовых класса для каждого класса, и это быстро станет проблемой.

Если кто-то знает способ сделать это, не требующий подключения eclipse plug -в или что-то в этом роде, тогда я буду вечно благодарен.

РЕДАКТИРОВАТЬ: Добавлен краткий образец того, что я описал выше;

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... */
        }
    }
}
6
задан Emily 24 August 2011 в 10:10
поделиться