6

使用 Hamcrest 可以很容易地否定匹配器。例如,您可以编写如下断言:

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

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

AssertJ 中是否有任何等价物?我知道可以组合/否定Conditions。但是正常的断言方法呢?例如,如果你想测试一个字符串不只包含数字,你会怎么做,即否定以下断言:

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

2 回答 2

5

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

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

于 2016-06-24T07:50:31.090 回答
4

这可以解决问题:

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

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

当与链式断言结合使用时,流利的 not() 会令人困惑,但我确实希望我们可以在 AbstractObjectAssert 上有一个通用的 dosNotSatisfy(Consumer)

于 2019-05-16T07:18:22.597 回答