我有以下测试结构:
public class WorkerServiceTest {
public class RaiseErrorTest extends AbstractDbUnitTest{
@Test
public void testSomething(){
}
...
}
...
}
这样做是因为我不想为扩展AbstractDbUnitTest
的每个测试用例创建单独的类文件。
问题是mvn test
没有从我的内部类中运行测试。是否有办法配置Maven来运行此类测试?当然我可以在父类中创建调用内部类方法的方法,但我想要一种更清晰的方法。
答案 0 :(得分:11)
是的,这可以使用新的(好吧,它不再是新的)Enclosed
跑步者(因为JUnit 4.5)运行外部类的所有静态内部类。
要使用它,只需使用@RunWith(Enclosed.class)
注释外部类,并使内部类静态。
@RunWith(Enclosed.class)
public class WorkerServiceTest {
public static class RaiseErrorTest extends AbstractDbUnitTest{
@Test
public void testSomething(){
}
...
}
...
}
mvn test
会运行它们。
答案 1 :(得分:9)
我解释(多一点)我发现的解决方案......
Maven(AFAIK)默认使用插件“maven-surefire-plugin”来运行你的maven项目中定义的任何测试。根据这个插件的documentation,默认情况下,它排除了内部静态类所包含的测试(或至少它与我正在使用的版本 - 2.18.1)。
所以我做的是放一个空的排除规则;导致像这样的pom的构建部分:
<build>
<plugins>
...
<!-- ~~~~~~~~~~ SUREFIRE -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.18.1</version>
<configuration>
<excludes>
<exclude></exclude>
</excludes>
</configuration>
</plugin>
...
</plugins>
</build>