assertThat() 总是成功的

assertThat() is always successful

我有一个测试没有在应该失败的时候失败:

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
}

怎么可能?

assertThat returns BooleanAssert 并且实际上没有断言任何东西。

AssertJ 提供了流畅的 API 因此您需要在此之后调用断言方法:

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

但您似乎不需要 AssertJ。 JUnit 自己的 assertTrue 就足够了:

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

甚至更好,assertEquals:

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

我会使用:

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

正如@default locale 所述,assertThat(false) 确实不检查任何内容,您可以使用 findbugs 检测到这种不良用法,如此处所述http://joel-costigliola.github.io/assertj/assertj-core.html#faq-incorrect-api-usage