[英]jUnit testing using hamcrest matcher - how to test the size of a collection.
在使用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)
哪里:
actual
是要比較的計算值 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)非常readbale(IMHO)。
assertThat(result.size(), is(3));
assertThat(result, iterableOfSize(3));
assertThat(result, hasSize(3));
除了主觀意見外,沒有其他任何理由可以選擇。 我建議選擇一種方法並始終使用該方法,因為在這里,“一致性原則”比正確性更受青睞,因為它們都相當正確。
您的兩種方法都是正確的,只是品味問題,因此您可以選擇最喜歡的任何一種
引用iterableWithSize文檔:
iterableWithSize(int size)為Iterables創建一個匹配器,該匹配器在經過檢查的Iterable上單次通過時產生的項目計數等於指定的size參數時進行匹配
我個人將使用簡單的assertEquals
:
assertEquals(3, result.size());
Hamcrest提供了更多的自然可讀性,因此(我沒有嘗試過),但是我想您可以使用:
assertThat(result, is(iterableWithSize(3)));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.