通过 Maven 从内部类运行测试

2022-09-04 08:08:56

我有以下测试结构:

public class WorkerServiceTest {

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

        ...
    }

    ...
}

它之所以完成,是因为我不想为每个扩展的测试用例创建一个单独的类文件。AbstractDbUnitTest

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


答案 1

是的,这是可以使用新的(好吧,它不再是新的)封闭式运行器(自JUnit 4.5以来)运行外部类的所有静态内部类。

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

@RunWith(Enclosed.class)
public class WorkerServiceTest {

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

        ...
    }

    ...
}

并将运行它们。mvn test


答案 2

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

默认情况下,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>

推荐