【发布时间】:2022-02-07 07:29:08
【问题描述】:
修复旧 Java Spring MVC 4.1 应用程序中的错误后,我想添加一个单元测试,但当前代码库用于测试的方法实际上不会执行验证。
所以我想添加 MVCMock,但是当它执行验证方法时,传递给 isValid 的值始终为 null。
以下相关文件(我已尝试尽可能多地去除噪音):
// Unit Test
@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
@EnableWebMvc
@ContextConfiguration(locations = {"/applicationContext-test.xml"})
public class ExampleControllerTest extends AbstractControllerTestBase {
@Autowired
private WebApplicationContext context;
private MockMvc mockMvc;
@Before
public void setup() {
this.mockMvc = webAppContextSetup(this.context).build();
}
@Test
public void fileUploadZipArchive() throws Exception {
// Upload a zip file
File mockFile = new File("src/test/resources/fixtures/ex.zip");
MockHttpServletRequestBuilder multipart = MockMvcRequestBuilders
.fileUpload("/files/ex/upload/Tex")
.file("ex.zip", FileUtils.readFileToByteArray(mockFile));
MvcResult result = mockMvc.perform(multipart)
.andReturn();
}
// Bean
public class FileUploadBean {
@Valid
@MultipartMimeTypeMatch
private MultipartFile file = null;
// ...
}
// Validator
public class MultipartMimeTypeMatchValidator implements ConstraintValidator<MultipartMimeTypeMatch, Object> {
// ...
public boolean isValid(Object value, final ConstraintValidatorContext context) {
// value and context is always null
}
}
// Controller
@RequestMapping(value = "/files/{ex1}/upload/{ex2}", method = RequestMethod.POST)
public Object uploadFile(HttpServletRequest request, @PathVariable String ex1,
@PathVariable String ex2, @Valid FileUploadBean fileUploadBean, BindingResult result) throws IllegalStateException, IOException {
// ...
}
}
可能出了什么问题?
注意:Spring 4.1
【问题讨论】:
-
ex.zip应该是file,因为这是模型对象中的名称。名称应与请求参数匹配。您发布的内容也没有意义,您是使用 Mockito 编写单元测试还是使用 MockMVC?这两种方法不匹配(一起使用也没有意义)。 -
我可能会删除我对 Mockito 的评论,那是 现有的 解决方案也不起作用
-
如前所述,
ex.zip在您的测试中应该是file。 -
嗯,这就是问题所在,谢谢!你想添加它作为答案吗?
标签: java spring unit-testing spring-mvc junit