Ebeid ElSayed
Ebeid ElSayed

Reputation: 1156

Unit testing Spring REST Controller

I have a Spring boot controller with a method like this:

// 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);
}

I'm trying to unit test it like this:

@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());
}

but the account is always null. Any idea why is that ?

Upvotes: 0

Views: 270

Answers (2)

softjake
softjake

Reputation: 1076

You may want to check my answer in How to test this method with spring boot test?

Not only you will find an answer to unit testing controllers but also how to include filters, handlers and interceptors in your test.

Hope this helps,

Jake

Upvotes: 2

Hatice
Hatice

Reputation: 944

I think you need to when clause first of all.

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

Upvotes: 0

Related Questions