Search code examples
junitassertassertj

assertThat() is always successful


I have a test that doesn't fail when it should:

import static org.assertj.core.api.Assertions.assertThat;

@Test
public void testTransactionResponse() {
    String id= "004";
    long amount= 5000001L;
    TransactionResource transactionResource = buildTransactionResource(amount, "EUR");
    System.out.println(transactionController.create(id, transactionResource).getStatusCode()); //the output is 403
    assertThat(transactionController.create(id, transactionResource).getStatusCode().equals(200)); //is true and test doesn't fail
}

How is it possible?


Solution

  • assertThat returns BooleanAssert and doesn't actually assert anything.

    AssertJ provides fluent API so you're expected to call assert methods after that:

    assertThat(
        transactionController.create(id, transactionResource).getStatusCode().equals(200)
    ).isTrue();
    

    But it doesn't seem that you need AssertJ for that. JUnit's own assertTrue would suffice:

     assertTrue(transactionController.create(id, transactionResource).getStatusCode().equals(200));
    

    or even better, assertEquals:

     assertEquals(200, transactionController.create(id, transactionResource).getStatusCode());