在你将我的问题标记为重复之前,我已经在其他帖子中尝试过解决方案,但不起作用。这就是我拥有的
Clientes Cliente1 = new Clientes(1,PinturasCliente1,ColoresCliente1);
Clientes Cli= new Clientes(1,PinturasCliente1,ColoresCliente1);
ArrayList<Clientes> ListaClientes = new ArrayList<Clientes>();
ArrayList<Clientes> ClientesMetodo = new ArrayList<Clientes>();
ListaClientes.add(Cliente1);
ClientesMetodo.add(Cli);
Assert.assertEquals(ListaClientes, ClientesMetodo);这个返回错误,顺便说一下,PinturasCliente1和ColoresCliente1也是ArrayList。
那么,我如何测试ListaClientes和ClientesMetodo都有不同的对象,但它们添加的对象具有相同的信息。
发布于 2018-02-26 07:18:50
您应该在要添加到列表中的对象的类上覆盖equals方法。
公共布尔值等于(对象obj)
指示某个其他对象是否与此对象“相等”。
equals方法在非空对象引用上实现等价关系:
类Object的equals方法在对象上实现了最具区分性的可能等价关系;也就是说,对于任何非空引用值x和y,当且仅当x和y引用同一对象时,此方法才返回true (x == y的值为true)。
请注意,通常需要在重写此方法时重写hashCode方法,以便维护hashCode方法的一般约定,该约定规定相等的对象必须具有相等的散列码。
参数: obj -要比较的引用对象。返回:如果此对象与obj参数相同,则返回true;否则返回false。
注意:如果在给定的类中重写equals方法,还建议重写hashCode方法。
发布于 2018-02-26 14:20:06
定义了AbstractList.equals():
public boolean equals(Object o) {
if (o == this)
return true;
if (!(o instanceof List))
return false;
ListIterator<E> e1 = listIterator();
ListIterator<?> e2 = ((List<?>) o).listIterator();
while (e1.hasNext() && e2.hasNext()) {
E o1 = e1.next();
Object o2 = e2.next();
if (!(o1==null ? o2==null : o1.equals(o2)))
return false;
}
return !(e1.hasNext() || e2.hasNext());
}因此它使用o1.equals(o2)来比较每个元素。在你的情况下,它是客户。但是默认情况下Clientes.equals()是Object.equals(),它是这样定义的:
public boolean equals(Object obj) {
return (this == obj);
}显然,Cliente1 != Cli。因此您应该在客户端中重写Object.equlas()。你可以通过添加来检查这个
public boolean equals(Object o) { return true; }在客户中。然后专注于实现。对于PinturasCliente1和ColoresCliente1,最好也为每个类实现自己的equals(),以防它们不是同一个对象。
发布于 2018-02-27 07:35:09
您可以重写从Object获取的所有对象的equals方法,
如果您使用maven / gradle,则可以导入Lombok project
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok-maven</artifactId>
<version>1.16.20.0</version>
<type>pom</type>
</dependency>并使用它自动生成equals和hashcode方法。
@EqualsAndHashCode
public class Clientes {
}https://stackoverflow.com/questions/48978292
复制相似问题