为什么在junit中assertEquals和assertSame为两个实例同一个类返回相同的结果? [英] Why assertEquals and assertSame in junit return the same result for two instances same class?

查看:129
本文介绍了为什么在junit中assertEquals和assertSame为两个实例同一个类返回相同的结果?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

根据文件


assertEquals()断言两个对象相等。

assertEquals() Asserts that two objects are equal.

assertSame()断言两个对象引用同一个对象。

assertSame() Asserts that two objects refer to the same object.

所以我希望如果我有一个像下面

So I am expecting that if I have a class like below

class SomeClass {}

然后

SomeClass someClass1= new SomeClass();
SomeClass someClass2= new SomeClass();
assertSame(someClass1,someClass2); // fail
assertEquals(someClass1,someClass2); // fail

assertEquals传递和assertSame失败。因为两个类的值都是等于但它们具有不同的参考位置。

the assertEquals pass and assertSame fail. as the value of both classes are equals but they have different reference location.

由于我在两种情况下都失败了,那么我的问题是这两者之间有什么区别?

As I get failure in both cases then my question is what are the difference between these two ?

推荐答案

由于你没有在你的类中重写equals, assertEquals 行为与 assertSame 相同,因为默认值等于实现比较引用。

Since you didn't override equals in your class, assertEquals behaves the same as assertSame since the default equals implementation compare references.

150    public boolean equals(Object obj) {
151        return (this == obj);
152    }

如果你提供一个愚蠢的等于:

If you provide a dumb overriding of equals:

class SomeClass {
    @Override 
    public boolean equals(Object o) {
        return true;
    }
}

你会看到 assertEquals 成功。

这篇关于为什么在junit中assertEquals和assertSame为两个实例同一个类返回相同的结果?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆