Context
我正在写一个简单的JUnit http://www.junit.org/测试为MyObject
class.
A MyObject
可以从静态工厂方法创建,该方法采用 varargsString http://docs.oracle.com/javase/7/docs/api/java/lang/String.html.
MyObject.ofComponents("Uno", "Dos", "Tres");
在存在期间的任何时间MyObject
,客户可以以a的形式检查它创建的参数列表 http://docs.oracle.com/javase/7/docs/api/java/util/List.html,通过.getComponents()
method.
myObject.ofComponents(); // -> List<String>: { "Uno", "Dos", "Tres" }
换句话说,一个MyObject
两者都会记住并公开使其存在的参数列表。有关此合同的更多详细信息:
- 的顺序
getComponents
将与为对象创建选择的相同
- 重复后续内容String http://docs.oracle.com/javase/7/docs/api/java/lang/String.html组件被允许并按顺序保留
- 行为上
null
未定义(其他代码保证没有null
到达工厂)
- 对象实例化后无法更改组件列表
我正在编写一个简单的测试来创建一个MyObject
从列表中String http://docs.oracle.com/javase/7/docs/api/java/lang/String.html并检查它是否可以通过返回相同的列表.getComponents()
. 我立即执行此操作,但这应该在实际代码路径中的远处发生.
Code
这是我的尝试:
List<String> argumentComponents = Lists.newArrayList("One", "Two", "Three");
List<String> returnedComponents =
MyObject.ofComponents(
argumentComponents.toArray(new String[argumentComponents.size()]))
.getComponents();
assertTrue(Iterables.elementsEqual(argumentComponents, returnedComponents));
Question
- Is 谷歌番石榴 http://code.google.com/p/guava-libraries/
Iterables.elementsEqual()
如果我的构建路径中有该库,最好的方法是比较这两个列表?这是我一直苦恼的事情;我应该使用这个帮助方法来遍历可迭代 http://docs.oracle.com/javase/7/docs/api/java/lang/Iterable.html..检查大小然后迭代运行.equals()
..或互联网搜索建议的任何其他方法?比较单元测试列表的规范方法是什么?
我希望获得可选的见解
- 方法测试设计是否合理?我不是这方面的专家JUnit http://www.junit.org/!
- Is
.toArray()
转换的最佳方式列表 http://docs.oracle.com/javase/7/docs/api/java/util/List.html到 E 的可变参数?