2

我有一个测试在它应该失败的时候不会失败:

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
}

这怎么可能?

4

2 回答 2

7

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());
于 2017-03-13T19:18:36.553 回答
3

我会使用:

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

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

于 2017-03-13T20:23:39.040 回答