簡體   English   中英

使用Hamcrest Matcher進行jUnit測試-如何測試集合的大小。

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM