Я делаю простой юнит-тест, используя mockMvc с springboot.SampleCtrl.java - исходный код источника, а SampleCtrlTest.java - исходный код теста.В SampleCtrl вставлено 3 макета, и они работают хорошо, кроме класса SampleService.Как видите, SampleService упакован с блоком try-catch.Итак, я понятия не имею, как вызвать метод в mock-классе, чтобы получить исключение return или throw в исходном коде теста.
Я удалил блок try-catch в исходном коде, также дал метод () в тестовом коде.Это сработало хорошо.Вот почему я думаю, что блок try-catch является несомненной причиной для ошибки.
SampleCtrl.java
@PostMapping(path = "/save", consumes = "application/json")
@ResponseBody
public ResponseEntity<Map<String, Object>> setEmp(@RequestBody
List<EmpSaveVo> vos) {
result.clear();
try {
msg = service.setEmp(vos);
} catch (Exception e) {
msg = e.getMessage();
}
result = messageTrans.getMapLang(msg);
return messageReturn.getRestResp(result, msg);
}
SampleCtrlTest.java
private MockMvc mockMvc;
@Mock
private SampleService service;
@Mock
private MessageTrans messageTrans;
@Mock
private MessageReturn messageReturn;
@InjectMocks
private SampleCtrl sampleCtrl;
@Before
public void setup() {
MockitoAnnotations.initMocks(this);
mockMvc = MockMvcBuilders.standaloneSetup(sampleCtrl).build();
}
@Test
public void givenEmployeeDataWhenPostEmpSave() throws Exception {
List<EmpSaveVo> empSaveVos = new ArrayList<>();
EmpSaveVo empSaveVo = new EmpSaveVo();
empSaveVo.setEmployeeId(100L);
empSaveVo.set_status((long) Status.Modified.getStatus());
empSaveVos.add(empSaveVo);
Gson gson = new Gson();
String element = gson.toJson(empSaveVos);
String msg = "Test";
Map<String, Object> result = new HashMap<>();
result.put("message", msg);
given(service.setEmp(empSaveVos)).willThrow(new Exception());
given(messageTrans.getMapLang(msg)).willReturn(result);
given(messageReturn.getRestResp(any(), anyString()))
.willReturn(new ResponseEntity<Map<String, Object>>(result, HttpStatus.OK));
mockMvc.perform(post("/api/emp/save")
.content(element)
.contentType(MediaType.APPLICATION_JSON)).andDo(print())
.andExpect(status().isOk());
}
Следовательно, я хочу видеть эту консольжурнал.
MockHttpServletResponse:
Status = 200
Error message = null
Headers = [Content-Type:"application/json;charset=UTF-8"]
Content type = application/json;charset=UTF-8
Body = {"message":"Test"}
Forwarded URL = null
Redirected URL = null
Cookies = []