2

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?

default locale
  • 13,035
  • 13
  • 56
  • 62
IKo
  • 4,998
  • 8
  • 34
  • 54

2 Answers2

8

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());
default locale
  • 13,035
  • 13
  • 56
  • 62
3

I would use:

assertThat(operation.getStatusCode()).isEqualTo(200);

As @default locale stated, it is true that assertThat(false) does not check anything, you can detect this bad usage with findbugs as explained here http://joel-costigliola.github.io/assertj/assertj-core.html#faq-incorrect-api-usage.

Joel Costigliola
  • 6,308
  • 27
  • 35