首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何检查两个数组列表是否相同(使用JUnit进行单元测试)

如何检查两个数组列表是否相同(使用JUnit进行单元测试)
EN

Stack Overflow用户
提问于 2018-02-26 04:47:53
回答 4查看 260关注 0票数 0

在你将我的问题标记为重复之前,我已经在其他帖子中尝试过解决方案,但不起作用。这就是我拥有的

代码语言:javascript
运行
复制
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);

这个返回错误,顺便说一下,PinturasCliente1ColoresCliente1也是ArrayList

那么,我如何测试ListaClientesClientesMetodo都有不同的对象,但它们添加的对象具有相同的信息。

EN

回答 4

Stack Overflow用户

发布于 2018-02-26 07:18:50

您应该在要添加到列表中的对象的类上覆盖equals方法。

javadoc

公共布尔值等于(对象obj)

指示某个其他对象是否与此对象“相等”。

equals方法在非空对象引用上实现等价关系:

  • It是自反的:对于任何非空引用值x,x.equals(x)应该返回true。
  • 它是对称的:对于任何非空引用值x和y,x.equals(y)应该返回true当且仅当y.equals(x)返回true。
  • 它是传递的:对于任何非空引用值x,y和z,如果x.equals(y)返回true并且y.equals(z)返回true,那么x.equals(z)应该返回true。空值是一致的:对于任何非空的引用值x和y,多次调用x.equals(y)总是返回true或一致地返回false,前提是在对象的相等比较中没有使用的信息是modified.
  • For任何非空引用值x,x.equals(x.equals)应该返回false。

类Object的equals方法在对象上实现了最具区分性的可能等价关系;也就是说,对于任何非空引用值x和y,当且仅当x和y引用同一对象时,此方法才返回true (x == y的值为true)。

请注意,通常需要在重写此方法时重写hashCode方法,以便维护hashCode方法的一般约定,该约定规定相等的对象必须具有相等的散列码。

参数: obj -要比较的引用对象。返回:如果此对象与obj参数相同,则返回true;否则返回false。

注意:如果在给定的类中重写equals方法,还建议重写hashCode方法。

票数 0
EN

Stack Overflow用户

发布于 2018-02-26 14:20:06

定义了AbstractList.equals():

代码语言:javascript
运行
复制
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(),它是这样定义的:

代码语言:javascript
运行
复制
public boolean equals(Object obj) {
    return (this == obj);
}

显然,Cliente1 != Cli。因此您应该在客户端中重写Object.equlas()。你可以通过添加来检查这个

代码语言:javascript
运行
复制
public boolean equals(Object o) { return true; }

在客户中。然后专注于实现。对于PinturasCliente1和ColoresCliente1,最好也为每个类实现自己的equals(),以防它们不是同一个对象。

票数 0
EN

Stack Overflow用户

发布于 2018-02-27 07:35:09

您可以重写从Object获取的所有对象的equals方法,

如果您使用maven / gradle,则可以导入Lombok project

代码语言:javascript
运行
复制
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok-maven</artifactId>
    <version>1.16.20.0</version>
    <type>pom</type>
</dependency>

并使用它自动生成equalshashcode方法。

代码语言:javascript
运行
复制
@EqualsAndHashCode
public class Clientes {

}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48978292

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档