我正在学习JUnit,我正在测试一个简单的方法,我有一个填充列表并返回它的方法。虽然在单元测试中我提供了相同的列表,但是单元测试失败了。
代码
public List<Transaction> retrieveData() throws ParseException {
List<Transaction> expResult = new ArrayList();
Date convertedDate = new SimpleDateFormat("yyyy-MM-dd").parse("2014-04-29T13:15:54");
Transaction tran = new Transaction("A", convertedDate,new BigDecimal("20.00"));
expResult.add(tran);
tran = new Transaction("B", convertedDate,new BigDecimal("20.00"));
expResult.add(tran);
tran = new Transaction("A", convertedDate,new BigDecimal("20.00"));
expResult.add(tran);
tran = new Transaction("B", convertedDate,new BigDecimal("20.00"));
expResult.add(tran);
return expResult;
}
JUnit的
@Test
public void testRetrieveData() throws ParseException {
MyClass instance = new MyClass();
List<Transaction> expResult = new ArrayList();
Date convertedDate = new SimpleDateFormat("yyyy-MM-dd").parse("2014-04-29T13:15:54");
Transaction tran = new Transaction("A", convertedDate,new BigDecimal("20.00"));
expResult.add(tran);
tran = new Transaction("B", convertedDate,new BigDecimal("20.00"));
expResult.add(tran);
tran = new Transaction("A", convertedDate,new BigDecimal("20.00"));
expResult.add(tran);
tran = new Transaction("B", convertedDate,new BigDecimal("20.00"));
expResult.add(tran);
List<Transaction> result = instance.retrieveData();
assertEquals(expResult, result);
}
失败的消息和堆栈跟踪如下
错误
expected: java.util.ArrayList<[
Transaction{cardNumber=A, timestamp=Tue Apr 29 00:00:00 EST 2014, price=20.00},
Transaction{cardNumber=B, timestamp=Tue Apr 29 00:00:00 EST 2014, price=20.00},
Transaction{cardNumber=A, timestamp=Tue Apr 29 00:00:00 EST 2014, price=20.00},
Transaction{cardNumber=B, timestamp=Tue Apr 29 00:00:00 EST 2014, price=20.00}]>
but was: java.util.ArrayList<[
Transaction{cardNumber=A, timestamp=Tue Apr 29 00:00:00 EST 2014, price=20.00},
Transaction{cardNumber=B, timestamp=Tue Apr 29 00:00:00 EST 2014, price=20.00},
Transaction{cardNumber=A, timestamp=Tue Apr 29 00:00:00 EST 2014, price=20.00},
Transaction{cardNumber=B, timestamp=Tue Apr 29 00:00:00 EST 2014, price=20.00}]>
java.lang.AssertionError
at org.junit.Assert.fail(Assert.java:93)
at org.junit.Assert.failNotEquals(Assert.java:647)
at org.junit.Assert.assertEquals(Assert.java:128)
at org.junit.Assert.assertEquals(Assert.java:147)
答案 0 :(得分:1)
比较列表时,您的测试是断言列表是等于,这将在列表中的所有元素上调用equals()
。
所有类的equals
的默认实现只是断言对象字面上是相同的(相同的指针)。
如果覆盖equals()
类中的Transaction
来检查类保留的值而不是引用,则测试将按预期运行。
答案 1 :(得分:0)
这是一个关于类似问题的讨论和彻底的答案:
How can I check if two ArrayList differ, I don't care what's changed