assertThat()总是成功的

时间:2017-03-13 18:55:40

标签: junit assert assertj

我有一个不会失败的测试:

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
}

怎么可能?

2 个答案:

答案 0 :(得分:4)

assertThat返回BooleanAssert并且实际上没有声明任何内容。

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

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

答案 1 :(得分:3)

我会用:

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

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