TestNG测试无法运行

时间:2013-06-25 21:54:13

标签: java maven testng

我在使用带有maven的TestNG时遇到了一些奇怪的问题。我有太多的代码要发布在这里,但我会发布一个相关的例子。

我在我的pom.xml中为TestNG测试提供了这个:

....other pom stuff....

<dependency>
     <groupId>org.testng</groupId>
     <artifactId>testng</artifactId>
     <version>6.2</version>
     <type>jar</type>
</dependency>

....other pom stuff....   

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.14.1</version>
    <configuration>
        <suiteXmlFiles>
            <suiteXmlFile>testng.xml</suiteXmlFile>
        </suiteXmlFiles>
    </configuration>
 </plugin>

 ....other pom stuff....

我的testng.xml文件如下所示:

<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="SOTest">
  <test name="SOTest">
    <classes>
      <class name="SOTest"/>
   </classes>
 </test>
</suite>

SOTest.java看起来像这样:

import org.testng.annotations.BeforeSuite;
import org.testng.annotations.Test;
import org.testng.annotations.BeforeTest;

public class SOTest {
    @BeforeSuite
    public void setup() {
        ...DO SOME STUFF...
        System.out.println("foo");
    }

    @BeforeTest
    public void setupTest() {
        ...DO SOME STUFF...
        System.out.println("bar");
    }   


    @Test
    public void test_good_subkey_pass() {
        System.out.println("baz");
        ...DO SOME STUFF...
    }
}

当运行mvn test时,会打印“foo”和“bar”,但是它会挂起并且“baz”从不打印?有谁知道什么会阻止使用@Test注释的方法运行?

更新

test_good_subkey_pass()之后还有另一个测试,其中包含无限循环。为什么会阻止第一次测试运行?请注意,preserve-order属性未设置为false

1 个答案:

答案 0 :(得分:2)

您知道XML文件定义了要运行的测试,但TestNG不会按照类代码中存在的顺序运行测试。您的XML文件似乎指定了运行的顺序,而不是执行方法的顺序。 (另外,我知道你可以指定包含/排除的方法,但我不确定即使它定义了它们将运行的顺序。根据我的经验,测试总是按字母顺序运行。)

如果另一个测试有无限循环,这可以解释为什么test_good_subkey_pass()没有运行。尝试删除其他测试用例以查看是否能解决问题(或使用@AfterSuite或类似注释来通知您所有测试完成)。

您可能只想在testng.xml中指定方法名称

这可能是您最好的资源:http://testng.org/doc/documentation-main.html#testng-xml