我们有一些与JDK 1.6一起工作正常的测试。我们现在转到JDK 1.7。这些测试在Eclipse中效果很好。当我们从蚂蚁构建中运行这些测试时,我们会看到这样的错误:
junit.framework.TestListener: addError(<testmethodname>, loader constraint violation:
when resolving overridden method
"com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal(Lorg/w3c/dom/Node;)Ljava/lang/Object;"
the class loader (instance of org/powermock/core/classloader/MockClassLoader) of the current class,
com/sun/xml/bind/v2/runtime/unmarshaller/UnmarshallerImpl, and its superclass loader (instance of <bootloader>),
have different Class objects for the type
com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal(Lorg/w3c/dom/Node;)Ljava/lang/Object; used in the signature)
我们第一次看到它时使用的是PowerMockito 1.5。我只是尝试升级到1.5.4和所有相关依赖项,这没有任何更改。
这显示了我们正在使用的类注释:
@RunWith(PowerMockRunner.class)
@PowerMockIgnore({ "javax.xml.*", "org.xml.sax.*" })
@PrepareForTest(<classundertest>.class)
public class <classundertest>Test extends MockServiceBase {
这里可能有什么问题?
昨晚我终于找到了解决方法。关键是在" @powermockignore"注释中添加其他软件包掩码。我尝试的第一件事就是添加" com.sun.xml。"。我曾认为这没有任何区别,但是我认为这只是修复了所指的软件包的测试。其余的参考文献是" com.sun.org。",我没有意识到这一点。当我最终还添加了" com.sun.org。*"时,它修复了剩余的测试。