在使用 JUnit/hamcrest 进行单元测试时是否存在特定的 api 来检查集合的大小。
目前我正在做 -
Set<String> result = program.getCollection("inputdata");
assertThat(3, is(result.size()) );
以上内容是否可以接受,或者我应该使用 iterableWithSize
,如下所示
assertThat(result, iterableWithSize(3));
什么应该是标准方法,或者两种方法都可以。
最佳答案
assertThat的方法签名是:
<T> void assertThat(T actual, Matcher<? super T> matcher)
地点:
实际
是正在比较的计算值matcher
是一个表达式,由 {@link Matcher} 构建,指定允许的值
所以,它的意思是:
assert that this computed value matches that expected value
鉴于此,您问题中的断言:
Set<String> result = program.getCollection("inputdata");
assertThat(3, is(result.size()) );
应表示为:
assertThat(result.size(), is(3));
这是一个微妙的差异,但它更符合 assertThat
的签名和 Hamcrest 匹配器的规范。
您的问题的其余部分涉及是否应该使用 is
还是 iterableWithSize
。以下所有断言都是(a)功能等效并且(b)非常可读(恕我直言)。
assertThat(result.size(), is(3));
assertThat(result, iterableOfSize(3));
assertThat(result, hasSize(3));
没有令人信服的理由(除了主观意见之外)选择其中一个而不是其他任何一个。我建议选择一种方法并始终如一地使用它,因为“一致性原则”应该比正确性更受青睐,因为它们都同样正确。
关于java - 使用 hamcrest 匹配器进行 jUnit 测试 - 如何测试集合的大小。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46413584/