【发布时间】:2018-02-23 19:27:35
【问题描述】:
我在处理 gradle 中的特定 junit 测试时遇到了一个不寻常的问题。当我按如下方式运行测试时,它通过了
gradlew 测试 --tests com.compsci.ic.xbrl.SchemaRefTest
但是当我运行时
gradlew 测试
以下堆栈跟踪失败
java.lang.IllegalStateException: Undeclared namespace prefix in DOM input: link
at net.sf.saxon.dom.NodeWrapper.getURI(NodeWrapper.java:531)
at net.sf.saxon.dom.NodeWrapper.getNameCode(NodeWrapper.java:412)
at net.sf.saxon.om.Navigator.copy(Navigator.java:523)
at net.sf.saxon.dom.NodeWrapper.copy(NodeWrapper.java:827)
at net.sf.saxon.om.Navigator.copy(Navigator.java:516)
at net.sf.saxon.dom.NodeWrapper.copy(NodeWrapper.java:827)
at net.sf.saxon.om.StrippedNode.copy(StrippedNode.java:448)
at net.sf.saxon.instruct.CopyOf.processLeavingTail(CopyOf.java:397)
at net.sf.saxon.instruct.Template.applyLeavingTail(Template.java:175)
at net.sf.saxon.instruct.ApplyTemplates.applyTemplates(ApplyTemplates.java:343)
at net.sf.saxon.Controller.transformDocument(Controller.java:1735)
at net.sf.saxon.Controller.transform(Controller.java:1559)
at org.custommonkey.xmlunit.Transform.transformTo(Transform.java:211)
at org.custommonkey.xmlunit.Transform.getResultDocument(Transform.java:233)
at org.custommonkey.xmlunit.XMLUnit.stripWhiteSpaceUsingXSLT(XMLUnit.java:514)
at org.custommonkey.xmlunit.XMLUnit.getWhitespaceStrippedDocument(XMLUnit.java:507)
at org.custommonkey.xmlunit.Diff.getWhitespaceManipulatedDocument(Diff.java:182)
at org.custommonkey.xmlunit.Diff.getManipulatedDocument(Diff.java:203)
at org.custommonkey.xmlunit.Diff.<init>(Diff.java:155)
at org.custommonkey.xmlunit.Diff.<init>(Diff.java:145)
at org.custommonkey.xmlunit.Diff.<init>(Diff.java:109)
at org.custommonkey.xmlunit.Diff.<init>(Diff.java:101)
at org.custommonkey.xmlunit.Diff.<init>(Diff.java:93)
at org.custommonkey.xmlunit.XMLAssert.assertXMLEqual(XMLAssert.java:228)
at org.custommonkey.xmlunit.XMLAssert.assertXMLEqual(XMLAssert.java:179)
at com.compsci.ic.xbrl.SchemaRefTest.testSerialize(SchemaRefTest.java:34)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.runTestClass(JUnitTestClassExecuter.java:114)
at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.execute(JUnitTestClassExecuter.java:57)
at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassProcessor.processTestClass(JUnitTestClassProcessor.java:66)
at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:51)
at sun.reflect.GeneratedMethodAccessor43.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:32)
at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93)
at com.sun.proxy.$Proxy1.processTestClass(Unknown Source)
at org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.java:108)
at sun.reflect.GeneratedMethodAccessor42.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:146)
at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:128)
at org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:404)
at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:46)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:55)
at java.lang.Thread.run(Thread.java:748)
该测试在 ant 中运行良好,因此我检查了 ant 和 gradle 之间的所有依赖关系,它们似乎都匹配。任何额外的建议将不胜感激
这里是测试的源代码
package com.compsci.ic.xbrl;
import java.io.IOException;
import java.net.URI;
import org.custommonkey.xmlunit.XMLAssert;
import org.custommonkey.xmlunit.XMLUnit;
import org.junit.Test;
import org.xml.sax.SAXException;
import com.compsci.ic.xbrl.xstream.URIConverter;
import com.thoughtworks.xstream.XStream;
public class SchemaRefTest {
@Test
public void testSerialize() throws SAXException, IOException {
SchemaRef ref = new SchemaRef();
ref.setHref(URI.create("http://example.com"));
XStream xstream = new XStream();
xstream.registerConverter(new URIConverter());
xstream.processAnnotations(SchemaRef.class);
XMLUnit.getTestDocumentBuilderFactory().setNamespaceAware(false);
XMLUnit.getControlDocumentBuilderFactory().setNamespaceAware(false);
XMLAssert.assertXMLEqual(
"<link:schemaRef xlink:type='simple' xlink:href='http://example.com'/>",
xstream.toXML(ref));
}
}
【问题讨论】:
-
如果没有看到任何失败测试的来源,我们应该如何提供帮助?
-
好点,我会调整上面的代码
-
您的测试在执行期间是否修改了任何文件
-
老实说,我不确定,我没有编写这些测试,我什至对 java 了解也不多,我只是一个开发者,在过去 2 个月里一直在转换我们的 ant/ivy 包毕业,这是最后的挂断