【发布时间】:2017-05-03 20:46:45
【问题描述】:
我有以下测试,实际上是在两个列表中断言数据。但即使数据相同,测试也没有通过。我用谷歌搜索并找到指向使用 assertThat(actual, containsInAnyOrder(expected.toArray())); 但没有运气的 SO 链接。
@Test
public void testGetOrderLines() {
List<OrderLine> expResult = new ArrayList<>();
OrderLine orderLine = new OrderLine(100, 5, "http://image-url.com", "Baby Gym",
1, "physical", "http://product-url.com", 100, "pcs", "100-123");
expResult.add(orderLine);
List<OrderLine> result = instance.getOrderLines();
assertThat(expResult, containsInAnyOrder(result.toArray()));
}
错误:
失败的测试: AuthorizationRequestTest.testGetOrderLines:92 预期:可按任何顺序迭代 [http://image-url.com,name=Baby Gym,quantity=1,type=physical,productUrl=http://product-url.com,unitPrice=100,quantityUnit=pcs,reference=100-123]>] 但是:不匹配:http://image-url.com,name=Baby Gym,quantity=1,type=physical,productUrl=http://product-url.com,unitPrice=100,quantityUnit=pcs,reference=100-123]>
【问题讨论】:
-
我认为
equals的实现是明智的? -
@JoeC 和
hashCode,大概。 -
不,没有 hashCode 和 equals 实现。由于模型类在我的控制之下,我当然可以继续实现上述两种方法,但只是想知道如果这是来自 3rd 方 jar 的类,我将如何进行测试?
-
你去吧!
-
@Darshan - 我的第二个问题仍然存在。如果类是在我们无法控制的第 3 方 jar 中定义的,您将如何比较这两个列表?
标签: java unit-testing testing junit hamcrest