google搜索 站内搜索                 软件测试门户 | 软件测试培训 | 文章资料精选 | 软件测试论坛 | 测试解决方案 | 软件测试博客 | 测试招聘求职 
打印

assertEquals与assertSame的区别(新手请教)

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 ]
想在测试上不断提高!!~~

TOP

俺用的是NUnit,运行以下这段程序
[Test]
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
就我个人理解,你的理解基本正确,但有一点:如果为同一个对象,其值应该就是相等的。
选择自己的态度!玩!让别人快乐!投入!

TOP

:d
明白了 呵呵 通过这个例子看得比较清楚,否则仅靠语言描述 总是不太理解
谢谢someone5!!
想在测试上不断提高!!~~

TOP

哎呀 我把这个例子转换为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>


这是怎么回事呀?
想在测试上不断提高!!~~

TOP

接下来改成以下样子,结果全通过了

又迷糊了: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);
        }
想在测试上不断提高!!~~

TOP

在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 ]
选择自己的态度!玩!让别人快乐!投入!

TOP

是不是说
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 ]
想在测试上不断提高!!~~

TOP

我记得之前学VC++的时候好像是说仅使用数组的名称,则表示指向该数组的指针,但是Java里没有指针,所以我也搞不太清楚。之前学的Java的内容基本上都快还给老师了,呵呵
选择自己的态度!玩!让别人快乐!投入!

TOP

引用:
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 ]
我到为植种,我行花未开;岂无佳色在?留待后人来

TOP

引用:
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
    是的
我到为植种,我行花未开;岂无佳色在?留待后人来

TOP

本功能由奇虎搜索实现

相关主题

标题 作者 最后发表
junit 实战二 李才军 2006-06-24
点击阅读更多关于的相关帖子  更多相关主题
 
当前时区 GMT+8, 现在时间是 2008-12-5 18:48Copyright(C)上海博为峰软件技术有限公司 2001-2007 电话:021-64471599-8017
当您在访问网站、论坛及博客过程中遇到问题时可发送email:webmaster@51testing.com或发送论坛短信至管理员风在吹