Junit |比较动态对象

时间:2012-09-14 09:28:45

标签: java unit-testing testing junit

如何比较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打算做的事了 谢谢。

4 个答案:

答案 0 :(得分:3)

查看ErrorCollector Rule

它允许您“收集”错误并最终输出它们。如果你使用它,JUnit在第一个错误时不会失败。

答案 1 :(得分:1)

你在这里要问的并不完全清楚。如果我们知道你在迭代什么会更容易,但假设它是一个Iterable,你可能最好看看hamcrest matchers

例如

asserThat(objList, Matchers.hasItem(expected);
如果预期等于你的iterable中的元素,

将通过。查看与junit捆绑在一起的匹配器,或将外部hamcrest库添加到测试项目中。

答案 2 :(得分:0)

我对大型数据结构所做的是使用合理的toString()方法并进行比较。

e.g。

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

这样做的原因是,使用IDE(显示差异)或文本比较,您可以看到所有不同的值以及它们的不同之处。第二项检查是确认它们确实是平等的。

答案 3 :(得分:0)

您可以使用基于数组的断言。为此,您必须将枚举转换为数组。

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