В наши дни я пишу много-много шаблонных тестов, и я хочу оптимизировать многие из этих базовых тестов таким образом, чтобы их можно было добавить ко всем текущим тестовым классам без особых хлопот.
Вот базовый тестовый класс:
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... */
}
}
}