Я объявил интерфейс как свойство моего @RestController
. Этот интерфейс просто имеет несколько полей / сеттеров / геттеров.
Реализация RestController и GetMapping выглядит следующим образом:
@RestController
@EnableAutoConfiguration
public class AccountController {
private AccountStoreInterface store;
@GetMapping(value="/account")
public Account readAccount(@RequestParam("id") String id) throws AccountNotFoundException {
Account a = store.getAccount(id);
if (a.getId().isEmpty()) {
throw new AccountNotFoundException();
}
return a;
}
@ExceptionHandler(AccountNotFoundException.class)
@ResponseStatus(NOT_FOUND)
public @ResponseBody String handleAccountNotFoundException(AccountNotFoundException ex) {
return ex.getMessage(); }
@ExceptionHandler(NullPointerException.class)
@ResponseStatus(INTERNAL_SERVER_ERROR)
public @ResponseBody String handleNullPointerException(NullPointerException ex) {
return ex.getMessage();
}
}
Объявление интерфейса выглядит так:
public interface AccountStoreInterface {
public Account getAccount(String id) throws AccountNotFoundException;
public Account setAccount(String id, Account account) throws AccountConflictException;
}
Я хотел бы проверить это, используя spring-boot-starter-test
и junit4
. Я ожидаю, что следующий тест вернет 500, потому что я не прошел ни один объект хранилища, который реализует мой интерфейс, поэтому он должен выдать NullPointerException
.
Как настроить юнит-тесты для проверки кодов состояния 500
и 404
?
В данный момент приведенный ниже тест на самом деле не проходит, потому что возвращаемое состояние равно 200, и я не понимаю, как добирается junit.
@RunWith(SpringRunner.class)
@WebMvcTest(AccountController.class)
public class TestAccountController {
@Autowired private MockMvc mockMvc;
@Autowired private WebApplicationContext wac;
@MockBean
private AccountController accountController;
@Test
public void testGetAccountNotFound() throws Exception {
mockMvc.perform(get("/account?id={id}", "test-account-id-123")
.accept(APPLICATION_JSON)
.characterEncoding("UTF-8"))
.andDo(print())
.andExpect(status().isNotFound());
}
}