![](/img/trans.png)
[英]java.lang.AssertionError: Status expected:<201> but was:<400>
[英]java.lang.AssertionError: Status expected:<400> but was:<404>
下面是我正在嘗試為其編寫單元測試的 controller 方法:
@GetMapping("/status/{uuid}")
public ResponseEntity<StatusResponse> getStatusByUUID(@PathVariable(value = "uuid", required = true) String uuid) {
if(uuid == null || uuid.isBlank() || uuid.isEmpty()) {
throw new ResponseStatusException(HttpStatus.BAD_REQUEST, Constant.UUID_VALIDATION_EXCEPTION);
}
logger.info("Get status request came in for UUID number: " + uuid);
return Handler.getStatusByUUID(uuid);
}
下面是我要運行的聯合測試
@Test
public void testGetStatusWhenUUIDIsEmpty() throws Exception {
mockMvc.perform(MockMvcRequestBuilders.get("/status/{uuid}", "")
.characterEncoding("utf-8")
.accept(MediaType.APPLICATION_JSON))
.andExpect(MockMvcResultMatchers.status().isBadRequest())
.andExpect(result -> assertTrue(result.getResolvedException() instanceof ResponseStatusException));
}
下面是錯誤的堆棧跟蹤
java.lang.AssertionError: Status expected:<400> but was:<404>
at org.springframework.test.util.AssertionErrors.fail(AssertionErrors.java:59)
at org.springframework.test.util.AssertionErrors.assertEquals(AssertionErrors.java:122)
at org.springframework.test.web.servlet.result.StatusResultMatchers.lambda$matcher$9(StatusResultMatchers.java:627)
at org.springframework.test.web.servlet.MockMvc$1.andExpect(MockMvc.java:212)
有人可以幫我解決我錯過的事情嗎? 感謝您的時間。
通過定義@GetMapping("/status/{uuid}")
,您已經定義了一個需要額外路徑的端點。 然而,在測試中,生成的 URL 是/status/
,它與GetMapping
的模式不匹配,因此是 404。
如果您修改 GetMapping 以在沒有附加路徑的情況下也處理 URI,它應該觸發該方法。
@GetMapping(value = {"/status", "/status/{uuid}"})
public ResponseEntity<StatusResponse> getStatusByUUID(@PathVariable(value = "uuid", required = false) String uuid) { ... }
這是我運行的測試代碼
@RestController
public class MyController {
@GetMapping("/foo/{var}")
public ResponseEntity<Void> foo(@PathVariable(value = "var") String var) {
HttpStatus status = StringUtils.hasText(var) ? HttpStatus.OK : HttpStatus.BAD_REQUEST;
return ResponseEntity.status(status).build();
}
@GetMapping(value = {"/bar", "/bar/{var}"})
public ResponseEntity<Void> bar(@PathVariable(value = "var", required = false) String var) {
HttpStatus status = StringUtils.hasText(var) ? HttpStatus.OK : HttpStatus.BAD_REQUEST;
return ResponseEntity.status(status).build();
}
}
public class MyTest {
MockMvc mockMvc = MockMvcBuilders.standaloneSetup(new MyController()).build();
@Test
public void foo() {
MvcResult result = mockMvc.perform(get("/foo/{var}", "")).andReturn();
assertEquals(404, result.getResponse.getStatus());
}
@Test
public void bar1() {
MvcResult result = mockMvc.perform(get("/bar/{var}", "val")).andReturn();
assertEquals(200, result.getResponse.getStatus());
}
@Test
public void bar2() {
MvcResult result = mockMvc.perform(get("/bar/{var}", "")).andReturn();
assertEquals(400, result.getResponse.getStatus());
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.