[英]What are typical uses cases for Test Execution Listeners in Testing Frameworks such as JUnit and TestNG?
[英]Testing TestNG listeners
我有一个测试A,该测试以编程方式运行另一个测试B,并且仅当测试B失败时,测试A才通过。 我希望构建仅在测试A通过时才能成功。
精确地,我实现了TestNG侦听器( MyListener
)。 我需要验证它是否正确处理了失败的测试结果。 测试它的唯一方法似乎是使测试A( testListener
)以编程方式运行另一个测试B( AlwaysFailingTest
)并检查结果。
@Test
public void testListener() {
System.setProperty("knownBugs", "execute");
tla = new TestListenerAdapter();
TestNG testng = new TestNG();
testng.setTestClasses(new Class[]{AlwaysFailingTest.class});
testng.addListener(tla);
testng.addListener(new MyListener());
testng.run();
assertThat(tla.getSkippedTests().size(), equalTo(0));
assertThat(tla.getFailedTests().size(), equalTo(1));
assertThat(tla.getPassedTests().size(), equalTo(0));
}
但是,我不希望故意失败的测试影响我的库的测试结果。 当前,对于mvn clean test
是这样的:
Tests run: 2, Failures: 1, Errors: 0, Skipped: 0, Time elapsed: 0.407 sec <<< FAILURE!
shouldAlwaysFail(com.testing.listeners.MyListenerTest$AlwaysFailingTest) Time elapsed: 0.01 sec <<< FAILURE!
java.lang.AssertionError: Failing as always
at org.testng.Assert.fail(Assert.java:94)
at com.testing.listeners.MyListenerTest$AlwaysFailingTest.shouldAlwaysFail(MyListenerTest.java:99)
testListener()
方法正在传递,这很好,但是为什么我总是不理解AlwaysFailingTest
结果出现在库测试结果中的原因。 我该如何避免呢?
我在这里列出了MyListener
和MyListenerTest
完整代码。
shouldAlwaysFail
被执行两次:一次由主测试套件执行,一次由testListener
测试编程testListener
。 由于它总是失败,因此主测试套件结果将包含失败。 要解决此问题,您可以从主测试套件中排除shouldAlwaysFail
测试,以使其仅以编程方式由testListener
测试运行。
您可以配置Maven Surefire排除测试:
<project>
[...]
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.19.1</version>
<configuration>
<excludes>
<exclude>**/AlwaysFailingTest.java</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
[...]
</project>
或配置TestNG以排除测试:
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="SuiteName" verbose="1">
<test name="TestName">
<packages>
<package name="com.testing.listeners"/>
</packages>
<classes>
<class name="com.testing.listeners.AlwaysFailingTest">
<methods>
<exclude name="shouldAlwaysFail"/>
</methods>
</class>
</classes>
</test>
</suite>
有关更多详细信息,请参见Maven Surefire插件-测试和/或TestNG文档的 包含和排除 -3-testng.xml 。
您为什么不使用@Test批注的“ expectedExceptions”属性,以便测试将期望它始终失败并且不会停止执行。
@Test(expectedExceptions=AssertionError.class)
public void test(){
Assert.fail();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.