通过Maven从内部类运行测试

Vla*_*mir 11 java junit maven-2 unit-testing

我有以下测试结构:

public class WorkerServiceTest {

    public class RaiseErrorTest extends AbstractDbUnitTest{
        @Test
        public void testSomething(){
        } 

        ...
    }

    ...
}
Run Code Online (Sandbox Code Playgroud)

这样做是因为我不想为每个扩展的测试用例创建一个单独的类文件AbstractDbUnitTest.

问题是mvn test没有从我的内部类运行测试.有没有办法如何配置Maven来运行这样的测试?当然我可以在父类中创建调用内部类方法的方法,但我想要一种更清晰的方法.

Pas*_*ent 11

是的,这是可能使用新的(当然,这不是新的了),Enclosed亚军(自JUnit的4.5),其运行的外部类的所有静态内部类.

要使用它,只需使用外部类注释@RunWith(Enclosed.class)并使内部类静态.

@RunWith(Enclosed.class)
public class WorkerServiceTest {

    public static class RaiseErrorTest extends AbstractDbUnitTest{
        @Test
        public void testSomething(){
        } 

        ...
    }

    ...
}
Run Code Online (Sandbox Code Playgroud)

mvn test将运行它们.


Car*_*Way 10

我解释(多一点)我发现的解决方案......

Maven(AFAIK)默认使用插件"maven-surefire-plugin"来运行你的maven项目中定义的任何测试.根据这个插件的文档,默认情况下,它排除了内部静态类所包含的测试(或至少它与我正在使用的版本 - 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>
Run Code Online (Sandbox Code Playgroud)