如果条件为

时间:2019-03-21 12:52:37

标签: unit-testing spring-boot spring-mvc junit mockito

在我的控制器中,我正在使用验证器类在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块并抛出异常,无视被嘲弄的行为。

0 个答案:

没有答案