java - TestNG 监听器 : working with XML, 因注释而失败

标签 java testng

我正在尝试向我的 TestNG 测试类添加一个监听器。

监听器 MyListener 是:

package somepackage.util;
import org.testng.ITestContext;
import org.testng.TestListenerAdapter;

public class MyListener extends TestListenerAdapter {
    @Override
    public void onFinish(ITestContext testContent) {
        System.out.println("onFinish");
    }
}

对于测试类 SimpleTest 我有:

package somepackage;

import somepackage.util.MyListener;
import org.testng.Assert;
import org.testng.annotations.Listeners;
import org.testng.annotations.Test;

@Listeners({ MyListener.class })
public class SimpleTest {
    @Test
    public void test() {
        System.out.println("Running test...");
        Assert.assertTrue(true);
    }
}

XML 是:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">

<suite name="SomeTests">
    <listeners>
        <!--listener class-name="somepackage.util.MyListener" /-->
    </listeners>
    <test name="SimpleTest">
        <classes>
            <class name="somepackage.SimpleTest" />
        </classes>
    </test>
</suite>

输出是(很多路径东西被剪切):

<snip>
[Parser] Running:
   <snip>/test.xml
Running test...

===============================================
SomeTests
Total tests run: 1, Failures: 0, Skips: 0
===============================================

Process finished with exit code 0

当我将 XML 中的注释更改为实际元素时:

<listener class-name="somepackage.util.MyListener" />

有效:

<snip>
[Parser] Running:
   <snip>/test.xml
Running test...
onFinish

===============================================
SomeTests
Total tests run: 1, Failures: 0, Skips: 0
===============================================

Process finished with exit code 0

知道为什么在 XML 工作正常时注释被忽略了吗?我可以使用 XML,但我也希望能够使用注释。

以防万一,我正在使用 IntelliJ IDEA 14 和 Java 7 运行测试。

最佳答案

问题是依赖性问题。在我的 pom.xml 中,我依赖于一些本身依赖于 TestNG 5.11 的类。在我发现我无法使用 @Listeners 注释之前,这种方法非常有效。

用命令

mvn dependency:tree

我发现我有错误的依赖项。为了摆脱它们,我不得不更改依赖于 TestNG 5.11 的工件周围的 pom.xml:

<dependency>
    <groupId>some.group.id</groupId>
    <artifactId>the.artifact.id</artifactId>
    <vers‌​ion>1.0</version>
    <exclusions>
        <exclusion>
            <groupId>org.testng</groupId>
            <artifactId>‌​testng</artifactId>
        </exclusion>
    </exclusions>
</dependency>

在那之后,正确的 TestNG 依赖项工作正常,我能够使用我的监听器。

旁注:例如 when 的行为retryAnalyzers 和 Listeners 的调用在 5.11 到 6.9.6 的版本中发生了巨大变化,我想它已经发生了很多次。例如,在 STO 上有很多问题涉及“如何修复最终通过的重试测试的报告”——我发现这些方法都不适合我,所以我自己想出了一个。这与问题并不完全相关,但我只是希望您确保在修复依赖关系后仔细检查您的监听器和分析器是否按预期调用并按预期工作。

关于java - TestNG 监听器 : working with XML, 因注释而失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31736428/

相关文章:

java - Java中如何避免重复?

java - 如何在没有JSTL和EJB的情况下从servlet输出数据到jsp

testing - 如何使带有@BeforeClass 的方法运行多次?

ant - 在 TestNG 中第一次失败后停止套件执行

java - TestNG 参数无法识别字符串参数

java - TestNG 使用 selenium 并行执行

java - 仅检索一个数组

Java客户端/服务器不通过Socket/ServerSocket进行通信

java - GSON : java. lang.IllegalStateException:预期为 BEGIN_OBJECT,但为 BEGIN_ARRAY

java - 带 testNG 的 spring 没有子类化