当前位置: 首页 > 知识库问答 >
问题:

测试TestNG侦听器

濮阳祯
2023-03-14
@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));
}
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的完整代码。

共有1个答案

逑禄
2023-03-14

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>
 类似资料:
  • 我目前正在为一个包含大量模块的大项目创建TestNG测试用例。现有的大多数单元测试实际上都是集成测试,因为它们非常依赖于/opt文件夹中的配置文件以及正在运行的数据库和消息队列。 为了使事情进一步复杂化,测试用例使用配置位于resources/meta-inf/services/org.TestNG.itestnglistener文件中的TestNG侦听器。这个文件中的侦听器触发所有测试用例(正如

  • 我正在尝试学习python来处理一个测试项目。是否有一种方法可以在python测试框架中实现类似功能的TestNG侦听器。 侦听器有诸如OnTestFailure()、OnTestSuccess、OnStart()等方法,当您想要做某些事情时,这些方法非常有用。 比方说,一个测试用例失败了,您想执行一些操作,比如截图。然后你可以只在一个地方写,而不是在每个测试方法中都写。

  • 而且,如果从Eclipse运行这样的测试,即使测试被移除,当套件完成时,失败仍然会打印在日志中。 关于RetryAnalyzer:我根本不考虑使用RetryAnalyzer的良好/最佳实践,但如果您发现自己处于需要解决问题的情况下,例如,您继承了一个依赖RetryAnalyzer的测试套件,您可能会发现这很有用。

  • 我们定义了一个testng结果侦听器,它帮助我们将testng.xml中定义的每个测试用例的测试结果发送到一个内部工具,如下所示: } 然后我们将这个侦听器集成到其他项目的testng xml文件中,例如: 它按照设计工作:一旦测试套件完成,测试结果将上传到内部工具。 现在我们有一个要求,在一个项目中,testng.xml中的一个测试用例与内部工具中的3个测试用例相关,这意味着对于testng.x

  • 我有一个Maven项目。它使用testng侦听器。我在pom文件中指定了监听器,但当我尝试使用旁边的绿色“播放”按钮运行任何测试时,IntelliJ会在没有监听器的情况下创建运行配置,测试无法运行。是的,我可以转到tab Listeners(参见屏幕截图)并手动添加我的listener。这样测试就可以正常运行。问题是:有没有办法帮助Idea自动检测并添加我的听众?我可以使用Maven配置运行测试,

  • 我正在尝试测试在中触发的侦听器回调, 侦听器类: 包含AsyncTask的类: 我要做的测试是: 我现在遇到的错误是: 线程中的异常...java.lang.RuntimeException:未模拟Android.os.AsyncTask中的方法执行。详见http://g.co/androidstudio/not-mocked。在android.os.asynctask.execute(async