我无法存根MockMultipartFile InputStream,因为每次它调用getInputStream时都会构造一个新的ByteArrayInputStream。
@Override
public InputStream getInputStream() throws IOException {
return new ByteArrayInputStream(this.content);
}
因此,当我stub我的InputService时,我无法返回
final Integer value1 = 2023;
final Boolean value2 = Boolean.TRUE;
final MockMultipartFile file = new MockMultipartFile(
"file",
"file.csv",
MediaType.TEXT_PLAIN_VALUE,
"Hello, World!".getBytes()
);
when(inputService.validateInput(value1, value2, file.getInputStream()))
.thenReturn(ValidationResult.builder().build());
mockMvc.perform(multipart("/file/validate")
.file(file)
.param("value1", value1.toString())
.param("value2", value2.toString())
)
.andDo(print()).andExpect(status().isOk())
.andExpect(content().contentType(MediaType.APPLICATION_JSON));
当我的控制器调用inputService时,它将返回null
,而不是我在thenReturn
中创建的对象。
如何在这里存根inputService.validateInput
,使validateInput返回我在测试中创建的对象?
我尝试同时使用anyObject()和any(InputStream.class),但它不起作用。
final InputStream inputStream = ArgumentMatchers.any(InputStream.class);
参数匹配器的使用无效!
1条答案
按热度按时间vltsax251#
它通过使用
org.mockito.ArgumentMatchers.any()
来匹配InputStream。它不能使用
org.mockito.ArgumentMatchers.any(InputStream.class)
。虽然由于
MockMultipartFile
在调用getInputStream()
时构造了一个ByteArrayInputStream
,但它确实可以通过将ByteArrayInputStream.class
指定为any()
来工作。