Наследование теста JUnit не работает
public abstract class GenericTests<T extends Number> {
protected abstract T getT();
@Test public void test1() {
getT();
}
}
public class ConcreteTests1 extends GenericTests<Integer> { ... }
public class ConcreteTests2 extends GenericTests<Double> { ... }
Никакие тесты не выполняются вообще, оба конкретных класса игнорируются. Как мне заставить работать? (Я ожидаю, что test1()
будет выполняться как для Integer
, так и для Double
).
Я использую JUnit 4.8.1.
Обновление: оказалось, что проблема связана с maven-surefire-plugin, а не с JUnit. См. Мой ответ ниже.
Ответы
Ответ 1
Переименовал все мои классы в суффикс "Тест", и теперь он работает (Concrete1Test
, Concrete2Test
).
Обновление
Это связано с настройками по умолчанию для maven-surefire-plugin.
http://maven.apache.org/plugins/maven-surefire-plugin/examples/inclusion-exclusion.html
По умолчанию плагин Surefire автоматически включает все тестовые классы со следующими шаблонами подстановок:
**/Test*.java
- включает все его подкаталоги и все имена файлов java, начинающиеся с "Test". **/*Test.java
- включает все его подкаталоги и все имена файлов java, заканчивающиеся на "Test". **/*TestCase.java
- включает все его подкаталоги и все имена файлов java, которые заканчиваются на "TestCase".
Ответ 2
Я тестировал это в Eclipse, используя ваш код скелета, и он работал нормально:
Базовый класс:
package stkoverflow;
import org.junit.Test;
public abstract class GenericTests<T> {
protected abstract T getT();
@Test
public void test1() {
getT();
}
}
Подкласс:
package stkoverflow;
public class ConcreteTests1 extends GenericTests<Integer> {
@Override
protected Integer getT() {
return null;
}
}
Запуск ConcreteTests1 в Eclipse Junit Runner отлично работал. Возможно, проблема связана с Maven?