如何防止maven surefire插件运行测试套件的成员两次?

时间:2014-09-26 11:34:04

标签: unit-testing junit junit4 maven-surefire-plugin

鉴于以下JUnit测试,surefire将运行TestATestB两次。个人第一次测试,第二次作为测试套件的一部分。 这似乎是一种不必要的行为事实上,像IntelliJ这样的流行IDE只会在测试套件中运行一次测试。

这是一个错误吗?有没有办法配置surefire-plugin来运行这些只作为测试套件的一部分?

GitHub

上提供的示例项目
@RunWith(Suite.class)
@Suite.SuiteClasses({TestA.class, TestB.class})
public class TestSuite
{}

public class TestA {
    @Test
    public void test() {
        System.out.println("=== RUN " + this.getClass());
    }
}

public class TestB {
    @Test
    public void test() {
        System.out.println("=== RUN " + this.getClass());
    }
}

2 个答案:

答案 0 :(得分:3)

Surefire只运行名称以“Test”开头或结尾的类。

但是如果在测试套件中明确列出了一个类,则无论名称模式如何都会执行它。

因此,解决方案可能是从属于套件的类名中删除“Test”。

实施例

@RunWith(Suite.class) @Suite.SuiteClasses({A.class, B.class})
public class TestSuite
{}

public class A {
    @Test
    public void test() {
        System.out.println("=== RUN " + this.getClass());
    }
}

public class B {
    @Test
    public void test() {
        System.out.println("=== RUN " + this.getClass());
    }
}

答案 1 :(得分:2)

  

有没有办法配置surefire-plugin来运行这些只作为测试套件的一部分?

是。您可以指定要运行的测试,并且只包括套件:

  <plugin>
    <artifactId>maven-surefire-plugin</artifactId>
    <configuration>
      <includes>
        <include>TestSuite.class</include>
      </includes>
    </configuration>
  </plugin>

AB将不再单独运行。请注意,如果您现在编写C测试,除非将其添加到测试套件中,否则它将无法运行。