我如何否定AssertJ中的断言?

时间:2016-06-23 14:06:27

标签: assertj

使用Hamcrest很容易否定匹配器。例如。你可以写一个这样的断言:

assertThat("The dog bites Tom", not(stringContainsInOrder(Arrays.asList("Tom", "dog"))));

即。使用org.hamcrest.core.IsNotorg.hamcrest.core.AnyOf匹配器很容易组合或否定断言。

AssertJ中有没有相应的内容? 我知道可以组合/否定Condition。但正常的断言方法呢?例如。如果你想测试一个String 只包含数字,你会怎么做,即否定下面的断言:

assertThat("1234xxx5678").containsOnlyDigits();

2 个答案:

答案 0 :(得分:4)

无法组合常规断言方法,这是Hamcrest比AssertJ更灵活的领域。

在你的情况下,我会按照你的建议编写一个条件,或者使用带有matches断言的lambda。

答案 1 :(得分:1)

这可以解决问题:

assertThat(Collections.singleton("1234xxx5678")).noneSatisfy(candidate -> 
    assertThat(candidate).containsOnlyDigits()
);

有点hacky,意图的清晰性还不能完全达到正常的assertJ标准,但是对于否定任何断言的完全一般情况,这就是我们到目前为止所拥有的。

流利的not()与链接的断言结合使用时会造成混乱,但我希望我们可以在AbstractObjectAssert上使用通用的dosNotSatisfy(Consumer)