如何 JUnit 测试两个 List 包含相同顺序的相同元素?

2024-01-31

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 的可变参数?

为什么不简单地使用List#equals?

assertEquals(argumentComponents, imapPathComponents);

合同List#equals http://docs.oracle.com/javase/7/docs/api/java/util/List.html#equals%28java.lang.Object%29:

如果两个列表包含相同顺序的相同元素,则它们被定义为相等。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何 JUnit 测试两个 List 包含相同顺序的相同元素? 的相关文章

随机推荐