<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>7.3.0</version>
</dependency>
从资源读取 testng-1.0.dtd 文件后抛出异常
testng-1.0.dtd 文件无法从资源中读取
IntelliJ v2020.2.3(TestNG IDE 插件版本 202.7660.26)
我认为您只需要添加一个 VM 参数“-Dtestng.dtd.http=true”,或者使用 HTTPS 资源。 目前,TestNG 需要在套件文件中默认使用 HTTPS。
@kobebryant2007 代码中有一个明显的错误。
testng-1.0.dtd
。@juherr请注意。
@shaburov -
我不想添加参数,也不想通过网络获取文件 testng-1.0.dtd。
根据我的理解,TestNG 从网络中查找 DTD 的原因是为了确保它检索到最新/正确的 DTD。 TestNG 将尝试仅通过 https 协议从 TestNG 网站检索 DTD,如果未找到,您将看到该错误。 禁用它的唯一方法是使用@kobebryant2007建议的 JVM 参数。
如果添加标志,那么根据代码,我将文件放在资源中是没有意义的。
您能帮我理解这种期望背后的原因是 TestNG 是从您的本地资源读取文件吗? 如果它在某个地方以这种方式提到,请指向我相关的文档。 总而言之,如果存在网络故障,则当前默认情况下 TestNG 中止。 这已被整理为 PR https://github.com/cbeust/testng/pull/2386 的一部分,它将回退到嵌入在 TestNG jar 中的 DTD。 我猜一旦 PR 被合并,那么你最终可以在你的 CLASSPATH 中创建你的 testng dtd 文件,它可以作为资源获取。
@shaburov你
TestNG jar 已经包含 DTD,它是应该使用的那个。
@juherr看看我附在屏幕截图上的代码,并意识到情况并非如此。
在从资源中读取文件之前将抛出异常。
我认为问题在于 IntelliJ 没有使用 HTTPS:
或者非 HTTPS 的 URL 不在URLS
列表中(注意TESTNG_DTD_URL
和HTTPS_TESTNG_DTD_URL
是完全一样的)。
@algotastic第二,我相信。
@shaburov是对的,这是一个错误:
https://github.com/cbeust/testng/blob/7.3.0/src/main/java/org/testng/xml/Parser.java#L33
它应该是public static final String TESTNG_DTD_URL = "http://testng.org/" + TESTNG_DTD;
而这个https://github.com/cbeust/testng/blob/7.3.0/src/main/java/org/testng/xml/Parser.java#L28
应该是public static final String OLD_TESTNG_DTD_URL = "http://beust.com/testng/" + TESTNG_DTD;
是的,它看起来像是来自https://github.com/cbeust/testng/commit/cf22ccfcb2a34f9b0bb4fa8cbedae5297ddd2049的意外“全部替换”
我可以添加“-Dtestng.dtd.http=true”,但这使得在 IntelliJ(右键单击并运行)中离线运行测试类/方法是不可能的。
最有用的评论
是的,它看起来像是来自https://github.com/cbeust/testng/commit/cf22ccfcb2a34f9b0bb4fa8cbedae5297ddd2049的意外“全部替换”