通过Maven从内部类运行测试

时间:2010-01-18 14:15:24

标签: java unit-testing maven-2 junit

我有以下测试结构:

public class WorkerServiceTest {

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

        ...
    }

    ...
}

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

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

2 个答案:

答案 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>