簡體   English   中英

Junit | 比較動態對象

[英]Junit | comparing dynamic objects

如何在Junit中比較動態對象類型,例如:

while (objList.hasNext()) {
      Object<String> obj = objList.next();
      Assert.assertEquals("expected", obj); 
}

在這種情況下,如果一次失敗則整個測試將失敗。 如果我在斷言測試之前使用條件來指出期望的字符串,這是一種好方法嗎?

像這樣:

while (objList.hasNext()) {
      Object<String> obj = objList.next();
      if (obj.equals("expected")) {
           Assert.assertEquals("expected", obj); 
      }
}

但是在這種情況下,沒有必要進行Junit斷言測試。 因為我已經在做Junit打算做的事情,謝謝。

看一下ErrorCollector規則

它允許您“收集”錯誤並最終輸出它們。 如果使用此方法,JUnit不會在第一個錯誤時失敗。

您在這里問的內容還不是很清楚。 如果我們知道您要迭代的內容會比較容易,但是假設它是Iterable,則最好查看hamcrest匹配器

例如

asserThat(objList, Matchers.hasItem(expected);

如果期望等於您的iterable中的元素,則將通過。 檢查與junit捆綁在一起的匹配器,或將外部hamcrest庫添加到測試項目中。

對於較大的數據結構,我要做的是使用明智的toString()方法並進行比較。

例如

assertEquals(""+expected, ""+obj);
assertEquals(expected, obj);

這樣做的原因是,通過IDE(向您顯示差異)或文本比較,您可以看到所有不同的值以及它們如何不同。 第二項檢查是確認它們確實相等。

您可以使用基於數組的斷言。 為此,您必須將枚舉轉換為數組。

Object [] enumAsArray = Collections.list(objList).toArray();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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