gpt4 book ai didi

java - 测试 TestNG 监听器

转载 作者:行者123 更新时间:2023-12-01 10:36:04 26 4
gpt4 key购买 nike

我有一个测试 A,它以编程方式运行另一个测试 B,并且仅当测试 B 失败时测试 A 才会通过。我希望只有当测试 A 通过时构建才能成功。

准确地说,我实现了 TestNG 监听器 (MyListener)。我需要验证它是否正确处理失败测试的结果。唯一的测试方法似乎是让测试 A (testListener) 运行另一个测试 B (AlwaysFailingTest) programmatically并检查结果。

@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 的结果出现在库测试结果中,我不明白。我怎样才能避免这种情况?

我列出了 MyListenerMyListenerTest 的完整代码 here

最佳答案

shouldAlwaysFail 被执行两次:一次由主测试套件执行,一次由 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 Plugin – Inclusions and Exclusions of Tests和/或TestNG Documentation - 3 - testng.xml了解更多详情。

关于java - 测试 TestNG 监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34718321/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com