测试单个类时不调用@BeforeSuite

时间:2014-11-20 12:14:32

标签: java unit-testing testng maven-surefire-plugin

我有一个@BeforeSuite - 带注释的方法。

public class MySuiteTest {

    @BeforeSuite
    public static void doSomethingVeryMandatory() {
        // say, boot up an embedded database
        // and create tables for JPA-annotated classes?
    }
}

public class MySingleTest {

    @Test
    public void doSomething() {
        // say, tests some MyBatis mappers against the embedded database?
    }
}

当我测试整个测试时,

$ mvn clean test
一切都很好。 @BeforeSuite运行并@Test运行。

当我尝试测试单个课程时

$ mvn -Dtest=MySingleTest clean test

doSomethingVeryMandatory()未被调用。

这是正常的吗?

2 个答案:

答案 0 :(得分:2)

你的@BeforeSuite和@Test在不同的班级。当您运行单个类时,testng会生成一个默认的suite.xml,其中只有一个类。因此,你的@BeforeSuite对于testng是不可见的。您可以在测试类中扩展MySuiteClass,也可以创建套件文件并按照注释中的建议运行套件文件。

答案 1 :(得分:0)

Babulu's对这个问题的评论很好,只是为将来的读者详细举例说明了:

  1. 在TestNG配置XML中创建套件:
<suite name="Suite Name" verbose="0">
    <test name="TestName">
        <classes>
            <class name="MySuiteTest"/>
            <class name="MySingleTest"/>
        </classes>
    </test>
</suite>
  1. 使用pom.xml中的maven调用此配置文件
<plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <version>2.12</version>
        <configuration>
            <suiteXmlFiles>
                <suiteXmlFile>config/testng.xml</suiteXmlFile>
            </suiteXmlFiles>
        </configuration>
</plugin>