我有一个不会失败的测试:
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
}
怎么可能?
答案 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所述。