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本身。请参阅下面的答案。
将我的所有类重命名为后缀“Test”,现在它可以工作(Concrete1Test
, Concrete2Test
)。
更新:
这与maven-surefire-plugin的默认设置有关。
http://maven.apache.org/plugins/maven-surefire-plugin/examples/inclusion-exclusion.html
默认情况下,Surefire插件将自动包含具有以下通配符模式的所有测试类:
**/Test*.java
- 包括其所有子目录和所有以“Test”开头的java文件名。
**/*Test.java
- 包括其所有子目录和以“Test”结尾的所有java文件名。
**/*TestCase.java
- 包括其所有子目录和所有以“TestCase”结尾的java文件名。
我在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;
}
}
在Eclipse中运行ConcreteTests1 Junit Runner运行良好。也许问题出在Maven身上?