为什么在junit中assertEquals和assertSame为两个实例同一个类返回相同的结果? [英] Why assertEquals and assertSame in junit return the same result for two instances same class?
问题描述
根据文件
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屋!