我如何否定 AssertJ 中的断言?
How do I negate assertions in AssertJ?
使用 Hamcrest 可以很容易地否定匹配器。例如。你可以这样写断言:
assertThat("The dog bites Tom", not(stringContainsInOrder(Arrays.asList("Tom", "dog"))));
即使用 org.hamcrest.core.IsNot
, org.hamcrest.core.AnyOf
匹配器很容易组合或否定断言。
AssertJ 中是否有任何等效项?
我知道 combine/negate Condition
是可能的。但是普通的断言方法呢?例如。如果你想测试一个字符串 not 只包含数字,你会怎么做,即否定以下断言:
assertThat("1234xxx5678").containsOnlyDigits();
无法组合正常的断言方法,这是 Hamcrest 比 AssertJ 更灵活的领域。
在你的情况下,我会按照你的建议编写一个条件,或者使用带有 matches
断言的 lambda。
这样做就可以了:
assertThat(Collections.singleton("1234xxx5678")).noneSatisfy(candidate ->
assertThat(candidate).containsOnlyDigits()
);
有点hacky,意图的清晰度不太符合正常的assertJ标准,但对于否定任何断言的完全一般情况,这是我们目前所拥有的。
当与链式断言结合使用时,流利的 not() 会令人困惑,但我确实希望我们可以在 AbstractObjectAssert
上有一个通用的 doesNotSatisfy(Consumer)
使用 Hamcrest 可以很容易地否定匹配器。例如。你可以这样写断言:
assertThat("The dog bites Tom", not(stringContainsInOrder(Arrays.asList("Tom", "dog"))));
即使用 org.hamcrest.core.IsNot
, org.hamcrest.core.AnyOf
匹配器很容易组合或否定断言。
AssertJ 中是否有任何等效项?
我知道 combine/negate Condition
是可能的。但是普通的断言方法呢?例如。如果你想测试一个字符串 not 只包含数字,你会怎么做,即否定以下断言:
assertThat("1234xxx5678").containsOnlyDigits();
无法组合正常的断言方法,这是 Hamcrest 比 AssertJ 更灵活的领域。
在你的情况下,我会按照你的建议编写一个条件,或者使用带有 matches
断言的 lambda。
这样做就可以了:
assertThat(Collections.singleton("1234xxx5678")).noneSatisfy(candidate ->
assertThat(candidate).containsOnlyDigits()
);
有点hacky,意图的清晰度不太符合正常的assertJ标准,但对于否定任何断言的完全一般情况,这是我们目前所拥有的。
当与链式断言结合使用时,流利的 not() 会令人困惑,但我确实希望我们可以在 AbstractObjectAssert
上有一个通用的 doesNotSatisfy(Consumer)