寻找org.assertj.core.api中已弃用方法containsOnlyElementsOf的替代方案
替代AssertJ已弃用
containsOnlyElementsOf的范围验证方案 如果你需要验证Integer列表的所有元素都处于指定数值范围,完全不需要依赖已弃用的containsOnlyElementsOf,AssertJ提供了更直接高效的断言方式:
方法1:使用allSatisfy逐个验证元素
这是最直观的方式,直接对列表中的每个元素做范围断言:
import static org.assertj.core.api.Assertions.assertThat; List<Integer> targetList = List.of(2, 4, 6, 8); int lowerBound = 1; int upperBound = 9; // 验证所有元素都在[lowerBound, upperBound]范围内 assertThat(targetList).allSatisfy(num -> { assertThat(num).isGreaterThanOrEqualTo(lowerBound); assertThat(num).isLessThanOrEqualTo(upperBound); });
也可以简化为链式断言:
assertThat(targetList).allSatisfy(num -> assertThat(num).isBetween(lowerBound, upperBound) );
方法2:过滤不符合条件的元素并断言为空
通过过滤出不在范围内的元素,断言过滤结果为空,间接验证所有元素符合要求:
assertThat(targetList) .filteredOn(num -> num < lowerBound || num > upperBound) .isEmpty();
为什么不用containsOnlyElementsOf?
之前用containsOnlyElementsOf配合范围集合的方式(比如先生成范围对应的Integer集合)存在明显缺陷:当范围跨度很大时,生成的集合会占用大量内存,且断言逻辑不够直观。上面的两种方法无需额外生成集合,直接针对元素做验证,性能和可读性都更优。
内容的提问来源于stack exchange,提问作者IDK
相关产品推荐
相关产品推荐

