在修復了較舊的 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 {
// ...
}
}
可能出了什么問題?
注意:彈簧 4.1
uj5u.com熱心網友回復:
該方法的 javadocfile宣告name應該是檔案的名稱。我同意這有點誤導。相反,它應該是要使用的請求引數的名稱,它應該(一般來說)與模型物件中的屬性相同。
.file("ex.zip", FileUtils.readFileToByteArray(mockFile));
有了這個,一個名為的請求引數ex.zip將成為請求的一部分,但是你有一個名為的引數file。
.file("file", FileUtils.readFileToByteArray(mockFile));
使用上面的行應該修復它并正確系結到您的物件,進而正確呼叫您的驗證器。
在一個側節點上,您的驗證器也應該正確處理這種null情況,或者也應該@NotNull在欄位上添加一個。在@Valid場上沒有做任何事情,所以你可以洗掉它。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/425491.html
下一篇:按關鍵字和類別在串列中搜索
