我在使用带有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
。
答案 0 :(得分:2)
您知道XML文件定义了要运行的测试,但TestNG不会按照类代码中存在的顺序运行测试。您的XML文件似乎指定了运行类的顺序,而不是执行方法的顺序。 (另外,我知道你可以指定包含/排除的方法,但我不确定即使它定义了它们将运行的顺序。根据我的经验,测试总是按字母顺序运行。)
如果另一个测试有无限循环,这可以解释为什么test_good_subkey_pass()
没有运行。尝试删除其他测试用例以查看是否能解决问题(或使用@AfterSuite
或类似注释来通知您所有测试完成)。
您可能只想在testng.xml中指定方法名称
这可能是您最好的资源:http://testng.org/doc/documentation-main.html#testng-xml