我对jUnit和ArrayList
这是我的问题:
我需要测试同一对象的2个ArrayList(它被调用的ArticuleED
)所以...在jUnit中我做下一个代码来比较结果和实际:
PersistenciaListas instance = new PersistenciaListas();
List<ArticuloED> actual = new ArrayList<>();
List<ArticuloED> result;
//Objects to add
//Videojuego is a subclass of Articulo(superclass)
ArticuloED articuloED1 = new ArticuloED(new Videojuego("VJ0011", "ULTRA Street Fighter 4", "Peleas", "T", "PS4", "Capcom", 5),10,10);
ArticuloED articuloED2 = new ArticuloED(new Videojuego("10", "Super Smash Bros Project M", "Peleas", "T", "Nintendo Wii", "Team M", 3));
//add elements to instance
//"Inventariar" is like add to the inventory
//That 10 is the number of items you will add to existence and availability
instance.inventariar((Videojuego) articuloED1.getArticulo(),10);
//Verified if they have the same elements
//that 10 and 10 are the 10 we added at inventariar, the first number is the existence
//the other is the availability
resultado = instance.consultarInventarioVideojuegos();
esperado.add(new ArticuloED(new Videojuego("VJ0011", "ULTRA Street Fighter 4", "Peleas", "T", "PS4", "Capcom", 5),10,10));
assertEquals(actual, result);
这是我在测试类中使用的代码
我得到的错误是下一个:
预期:java.util.ArrayList&lt; [VJ0011,ULTRA Street Fighter 4,10,10]&gt;但是:java.util.ArrayList&lt; [VJ0011,ULTRA Street Fighter 4,10,10]&gt; persistencia.PersistenciaListasTest.testConsultarInventarioVideojuegos(PersistenciaListasTest.java:492)中的junit.framework.AssertionFailedError
答案 0 :(得分:2)
您正在比较两种非原始数据类型。 assertEquals方法返回false,因为对于非原始数据类型(在您的情况下,两个列表实际和结果),它检查对象引用的相等性而不是对象内容。
要解决此问题,您可以做两件事:
1)您可以访问对象的原始属性,并将它们与assertEquals方法进行比较。
2)您可以编写自己的方法来执行对象比较,然后通过运行
将其集成到JUnit中assertEquals(true, myComparison(actual, result));
与
public boolean myComparison(ArrayList<ArtuculoED> first, ArrayList<ArticuloED> second){
// return true, if contents equal and false if not
}
答案 1 :(得分:1)
assertEquals
不会“深度搜索”两个类的相等性,而是使用测试对象的equals()
方法。即使toString()
可能返回相同的内容,您也必须循环每个元素以测试单个相等:
assertEquals(actual.size(), result.size());
for (int i = 0; i < actual.size(); i++)
assertEquals(actual.get(i), result.get(i));
答案 2 :(得分:1)
您的域类(ArticuloED
和Videojuego
)应覆盖equals()
和hashCode()
方法,以便两个列表的内容相同。
答案 3 :(得分:0)
正如@fedorSmirnov已经写过的那样,你正在将两个非原始数据类型与equal
进行比较,这样做不会达到你想要的效果。
我建议您使用AssertJ,其中asserts for Lists(以及更多类)。