Как использовать свойство интерфейса в моем RestController для возврата данных в моих обработчиках запросов - PullRequest
0 голосов
/ 14 марта 2019

Я объявил интерфейс как свойство моего @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());
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...