在我的控制器中,我正在使用验证器类在if
块中进行验证检查。
由于验证代码尚未完成,我只想测试一下 验证成功后,响应应该为201(成功)。
为此,我正在模拟验证器对象的行为以返回true
即有效。
问题是,即使我嘲笑了验证器对象的行为,也没有输入if
块,这样它才不会抛出验证异常,它实际上是输入并抛出异常。这意味着嘲笑没有用。我知道假设要执行测试的方法实现很不好,但是我想知道为什么它不起作用。
myController.class
@RestController
@RequestMapping("/v1/api")
public class myController {
@Autowired
private RequestService requestService;
@Autowired
RequestValidator validator;
@PostMapping(value = "")
@ResponseStatus(code = HttpStatus.CREATED)
public @ResponseBody
BaseResponse<Response> create(@RequestBody Request<Data> request){
if(!validator.isValidRequestObject(request))
{
throw new RuntimeException("invalid request");
}
Response data = requestService.submitData(request);
BaseResponse<Response> response = new BaseResponse<Response>();
response.setData(data);
response.setMessage("Created Successfully");
return response;
}
ControllerTest.class
@RunWith(SpringRunner.class)
@SpringBootTest
@AutoConfigureMockMvc
public class ControllerTest {
@Autowired
private MockMvc mockMvc;
@Autowired
Request<Data> request;
@MockBean
RequestService service;
@MockBean
RequestValidator validator;
ObjectMapper mapper = new ObjectMapper();
@Test
public void createTest() throws Exception {
when(validator.isValidRequestObject(request)).thenReturn(true);
when(service.submitData(request)).thenReturn(null);
this.mockMvc.perform(post("/v1/api")
.content(mapper.writeValueAsString(request))
.contentType(MediaType.APPLICATION_JSON))
.andExpect(status().isCreated());
}
如果我删除了throw new exception
行,则测试通过。
我假设由于我在validator
中嘲笑了myController
行为
如果阻塞则不应输入,因此不会抛出异常。
但是它进入了if
块并抛出异常,无视被嘲弄的行为。