assertEquals与assertSame的区别(新手请教)
assertEquals(java.lang.Object expected, java.lang.Object actual)assertSame(java.lang.Object expected, java.lang.Object actual)
请教以上两种方法的区别
网上看到
assertEquals:用于判断实际值和期望值是否相同
assertSame:判断实际值和期望值是否为同一个对象
不知是否可以这样理解:(新手,提问不当之处还请见谅)
assertEquals(java.lang.Object expected, java.lang.Object actual)
——仅判断值是否相等,是否为同一个对象则不关心(可能存在不同对象,但值相等的情况吗?)
assertSame(java.lang.Object expected, java.lang.Object actual)
——判断是否为同一个对象,但不关心两者的值是否相等
刚刚开始学习Junit,还请各位前辈指教!:)
[ Last edited by ting_yt2 on 2005-5-24 at 14:02 ] 俺用的是NUnit,运行以下这段程序
public void TestForAreEqual()
{
string[] string1 = {"1","2"};
string[] string3 = string1;
string[] string4 = {"1","2"};
Assert.AreSame(string1,string3,"string1和string3不相同");
Assert.AreEqual(string1,string3,"string1和string3不相等");
Assert.AreEqual(string1,string4,"string1和string4不相等");
Assert.AreSame(string1,string4,"string1和string4不相同");
}
运行结果如下:
TestForAreEqual : string1和string4不相同 expected same
就我个人理解,你的理解基本正确,但有一点:如果为同一个对象,其值应该就是相等的。 :d
明白了 呵呵 通过这个例子看得比较清楚,否则仅靠语言描述 总是不太理解
谢谢someone5!! 哎呀 我把这个例子转换为Junit的:
public void testAssert(){
String[] string1 = {"1","2"};
String[] string3 = string1;
String[] string4 = {"1","2"};
assertSame("string1和string3不相同",string1,string3);
assertEquals("string1和string3不相等",string1,string3);
assertEquals("string1和string4不相等",string1,string4);
assertSame("string1和string4不相同",string1,string4);
}
可是结果是:
string1和string4不相等 expected:<[Ljava.lang.String;@1d58aae> but was:<[Ljava.lang.String;@83cc67>
string1和string4不相同 expected same:<[Ljava.lang.String;@1d58aae> but was:<[Ljava.lang.String;@83cc67>
这是怎么回事呀? 接下来改成以下样子,结果全通过了
又迷糊了:s
public void testAssert(){
String string1 = "11";
String string3 = string1;
String string4 = "11";
assertSame("string1和string3不相同",string1,string3);
assertEquals("string1和string3不相等",string1,string3);
assertEquals("string1和string4不相等",string1,string4);
assertSame("string1和string4不相同",string1,string4);
} 在Java中,初始化String分为两种:
1. String s1 = "11";
2. String s2 = new String("11")
区别:
方法1中,先在内存中查找有没有"11"这个字符串对象存在,如果存在就把s1指向这个字符串对象;
方法2中,不论内存中是否已经存在"11"这个字符串对象,都会新建一个对象。
[ Last edited by someone5 on 2005-5-25 at 13:57 ] 是不是说
assertSame("string1和string4不相同",string1,string4); 这句可能通过也可能不通过,要看其内存中是否已经存在该对象?
但是assertEquals("string1和string4不相等",string1,string4);这句是不是应该通过呢 可前面那个里这句不通过啊
Originally posted by ting_yt2 at 2005-5-25 12:22:
哎呀 我把这个例子转换为Junit的:
public void testAssert(){
String[] string1 = {"1","2"};
String[] string3 = string1;
String[] string4 = {"1",& ...
还有一点,我说的是assertEquals(java.lang.Object expected, java.lang.Object actual) ,其中的Object指狭义的 也就是不包括iboolean,byte,char,double,float,int,long,string的object
[ Last edited by ting_yt2 on 2005-5-25 at 15:04 ] 我记得之前学VC++的时候好像是说仅使用数组的名称,则表示指向该数组的指针,但是Java里没有指针,所以我也搞不太清楚。之前学的Java的内容基本上都快还给老师了,呵呵 Originally posted by ting_yt2 at 2005-5-25 12:22 PM:
哎呀 我把这个例子转换为Junit的:
public void testAssert(){
String[] string1 = {"1","2"};
String[] string3 = string1;
String[] string4 = {"1",& ...
我用Eclipse跟了一下,
[*] assertEquals("string1和string4不相等", string1, string4);进入
[*] static public void assertEquals(String message, Object expected, Object actual) {
if (expected == null && actual == null)
return;
if (expected != null && expected.equals(actual))
return;
failNotEquals(message, expected, actual);
}
其中if (expected != null && expected.equals(actual))语句,方法expected.equals(actual)的说明是“true if this object is the same as the obj argument; false otherwise.”,就是说,这里比较的还是String1、String4是不是同一个对象。
关于这个问题的更多讨论可以参见http://www.blueidea.com/bbs/archivecontent.asp?id=945875
[ Last edited by wangxh1000 on 2005-6-9 at 19:26 ] Originally posted by ting_yt2 at 2005-5-25 02:16 PM:
是不是说
assertSame("string1和string4不相同",string1,string4); 这句可能通过也可能不通过,要看其内存中是否已经存在该对象?
但是assertEquals("string1和string4不相等",string1, ...
[*] assertSame("string1和string4不相同",string1,string4);
这里比较string1、string4是不是同一个对象
[*] assertEquals("string1和string4不相等",string1,string4);
当这样声明的时候
String[] string1 = {"1","2"};
String[] string3 = string1;
String[] string4 = {"1","2"};
从结果看string1、string4指向两个对象
当这样声明的时候
String string1 = "11";
String string3 = string1;
String string4 = "11";
string1、string4指向一个对象
原因,就是someone5说的
“1. String s1 = "11";
方法1中,先在内存中查找有没有"11"这个字符串对象存在,如果存在就把s1指向这个字符串对象;”
[*] assertEquals(java.lang.Object expected, java.lang.Object actual) ,其中的Object指狭义的 也就是不包括iboolean,byte,char,double,float,int,long,string的object
是的
页:
[1]