Модульное тестирование Spring REST Controller

У меня есть контроллер загрузки Spring с таким методом:

// CREATE
@RequestMapping(method=RequestMethod.POST, value = "/accounts")
public ResponseEntity<Account> createAccount(@RequestBody Account account,
                                            @RequestHeader(value = "Authorization") String authorizationHeader,
                                             UriComponentsBuilder uriBuilder) {

    if (!account.getEmail().equalsIgnoreCase("")) {
        account = accountService.createAccount(account);
        HttpHeaders headers = new HttpHeaders();

        System.out.println( "Account is null = " + (null == account)); //For debugging
        headers.setLocation(uriBuilder.path("/accounts/{id}").buildAndExpand(account.getId()).toUri());

        return new ResponseEntity<>(account, headers, HttpStatus.CREATED);
    }
    return new ResponseEntity<>(null, null, HttpStatus.BAD_REQUEST);
}

Я пытаюсь выполнить модульное тестирование следующим образом:

@Test
public void givenValidAccount_whenCreateAccount_thenSuccessed() throws Exception {
    /// Arrange
    AccountService accountService = mock(AccountService.class);
    UriComponentsBuilder uriBuilder = mock(UriComponentsBuilder.class);
    AccountController accountController = new AccountController(accountService);
    Account account = new Account("[email protected]");

    /// Act
    ResponseEntity<?> createdAccount = accountController.createAccount(account, "", uriBuilder);

    /// Assert
    assertNotNull(createdAccount);
    //assertEquals(HttpStatus.CREATED, createdAccount.getStatusCode());
}

но счет всегда нулевой. Есть идеи, почему это так?

given(accountService.save(account)).willReturn(account);?
K.Nicholas 14.05.2018 19:39
0
1
206
2

Ответы 2

Я думаю, вам нужно в первую очередь указать когда.

  when(accountController.createAccount(account, "", uriBuilder)).then(createAccount); 
  ResponseEntity<?> createdAccount = accountController.createAccount(account, "", uriBuilder);

Вы можете проверить мой ответ в Как проверить этот метод с помощью теста весенней загрузки?

Вы найдете не только ответы на вопросы о контроллерах модульного тестирования, но и о том, как включить фильтры, обработчики и перехватчики в свой тест.

Надеюсь это поможет,

Джейк

Другие вопросы по теме