【发布时间】:2014-03-24 16:35:22
【问题描述】:
我有一段非常标准的 JAXB 代码
StringReader is = new StringReader(rspString);
Unmarshaller ums = Util.createUnMarshaller(cL, Schemas.RECEIPT_SCHEMA, GetReceiptCallResponse.class);
UnmarshallerHandler umsHandler = ums.getUnmarshallerHandler();
XMLFilter filter = Util.createSaxNamespaceFilter();
filter.setContentHandler(umsHandler);
InputSource xml = new InputSource(is);
filter.parse(xml);
它在生产中运行良好,并且作为单元测试的一部分。但是,当它由 Maven/Cobertura 插件运行时,它会失败。奇怪的是,当它由 maven surefire 插件运行时,代码运行良好(没有覆盖率测量)。此外,无论是作为单元测试运行还是在 IntelliJ 覆盖工具下运行,它都能在 IntelliJ IDE 中正常运行。似乎唯一的区别是 cobertura 工具本身。
我检查了输入时的架构和 XML 文件,一切正常。无论有无 cobertura 运行,代码都会得到完全相同的输入。
我得到的具体错误是:
testFailingParseWithCobertura(org.vlad.taxestime.ReceiptImporterTest) Time elapsed: 10.33 sec <<< ERROR!
org.xml.sax.SAXParseException: cvc-complex-type.3.2.2: Attribute 'count' is not allowed to appear in element 'Receipts'.
at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:198)
at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.error(ErrorHandlerWrapper.java:134)
at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:437)
at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:368)
at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:325)
at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator$XSIErrorReporter.reportError(XMLSchemaValidator.java:458)
【问题讨论】:
-
我从来没有在 Cobertura 的任何不平凡的事情上取得过很大的成功。如果您不关心覆盖工具,请尝试 JaCoCo。
-
您的异常与架构验证有关。属性
count不允许出现在元素Receipts中是否存在异常?如果是这样,其他环境可能应该抛出异常但没有 -
@BlaiseDoughan,不,只有在 cobertura 工具下运行代码时才会发生异常。当单元测试在没有覆盖的情况下运行时,它永远不会发生,它在生产和 IntelliJ IDE 中也能正常工作。事实上,在 IntelliJ 中,无论有无覆盖工具,它都可以运行。
标签: java maven jaxb cobertura maven-cobertura-plugin