我正在研究Java应用程序的一部分,该应用程序将图像作为字节数组,将其读入java.awt.image.BufferedImage实例并将其传递给第三方库进行处理.
对于单元测试,我想拍摄一张图像(来自磁盘上的文件)并声明它等于代码处理过的相同图像.
BufferedImage是从磁盘上的PNG文件中读取ImageIO.read(URL).BufferedImage并将其作为PNG写入字节数组,以提供给被测系统.当被测系统将字节数组写入新的时,BufferedImage我想断言两个图像以有意义的方式相等.使用equals()(继承自Object)不起作用(当然).比较BufferedImage.toString()值也不起作用,因为输出字符串包括对象引用信息.
有人知道任何捷径吗?我不想在大型应用程序的一小部分中引入第三方库进行单个单元测试.
我有一个相对简单的8个Java类包,它使用JAXB XJC从XML模式生成.我还有一个实用程序类来编组和解组该类的实例.
实用程序类可以成功地将有效的XML文档解组为"root"类的实例WordMergeInfo.例如,这工作正常:
JAXBContext jc = JAXBContext.newInstance(WordMergeInfo.class);
Unmarshaller um = jc.createUnmarshaller();
return (WordMergeInfo)um.unmarshal(inputStream);
Run Code Online (Sandbox Code Playgroud)
但编组到字符串失败.在这段代码中:
JAXBContext jc = JAXBContext.newInstance(WordMergeInfo.class);
Marshaller m = jc.createMarshaller();
StringWriter writer = new StringWriter();
m.marshal(m, writer);
return writer.toString();
Run Code Online (Sandbox Code Playgroud)
调用Marshaller.marshal失败,出现以下错误:
javax.xml.bind.JAXBException: class com.sun.xml.bind.v2.runtime.MarshallerImpl nor any of its super class is known to this context.
at com.sun.xml.bind.v2.runtime.JAXBContextImpl.getBeanInfo(JAXBContextImpl.java:594)
at com.sun.xml.bind.v2.runtime.XMLSerializer.childAsRoot(XMLSerializer.java:482)
at com.sun.xml.bind.v2.runtime.MarshallerImpl.write(MarshallerImpl.java:315)
at com.sun.xml.bind.v2.runtime.MarshallerImpl.marshal(MarshallerImpl.java:244)
Run Code Online (Sandbox Code Playgroud)
据我了解,这nor any of its super class is known to this context意味着无法找到编组所需的JAXB类.那么当堆栈跟踪中的同一个类时,为什么不能找到其中一个JAXB实现类?
这个错误出现在我班级的单元测试中,在Maven下运行.依赖关系是:
我对这些早期版本(分别为2.0和2.0.3)有同样的错误.
Maven测试类路径是:
C:\Users\mstra.CUSTMAN\Workspace\DARTCorrModule\xml\target\test-classes …Run Code Online (Sandbox Code Playgroud)