我有一个方法将MultipartFile对象作为参数。在方法内部,我使用ImageIO.read(some_value)
和ImageIO.write(some_value)
。我想用模拟图像测试此方法(我不想将图像存储在资源文件夹下)。
我已经尝试过了:
MockMultipartFile file = new MockMultipartFile("file", "boat.jpg", "image/jpeg", "content image".getBytes());
,但没有成功。
public void f(MultipartFile file) throws IOException {
final BufferedImage read = ImageIO.read(new ByteArrayInputStream(file.getBytes()));
try (ByteArrayOutputStream baos = new ByteArrayOutputStream()) {
ImageIO.write(read, "jpg", baos);
}
}
运行测试时,read
变量的值为null
。我认为这个问题来自"content image".getBytes()
。
是否可以使用模拟图像代替真实图像?
答案 0 :(得分:1)
"content image".getBytes()
返回字符串byte[]
的{{1}}表示形式。 "content image"
应该如何从中构造一个ImageIO
?
您在这里有两个选择。
BufferedImage
的真实数据传递到byte[]
MockMultipartFile
的静态方法
ImageIO
,而无需从文件中读取图像。BufferedImage
的调用。write()
现在,当您的被测方法调用PowerMockito.mockStatic(ImageIO.class);
when(ImageIO.read(any())).thenAnswer(invocation -> {
Object argument = invocation.getArguments()[0];
// here you can check what arguments you were passed
BufferedImage result = new BufferedImage(600, 400, BufferedImage.TYPE_INT_RGB); // create a BufferedImage object
// here you can fill in some data so the image isn't blank
return result;
});
时,它将收到您在lambda中构造的imageIO.read()
,而无需实际读取任何文件。