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