用于测试 StringBuffer 的 JUnit

JUnit to test for StringBuffers

作业:编写一个 JUnit 测试,假设您有两个 StringBuffer 引用,名为 sbOne 和 sbTwo,并且您只希望它在两个引用指向同一个 StringBuffer 对象时通过。

我想确保这确实是处理此作业的好方法。我写了假定的练习方法:

package StringBufferJUni;

public class StringBufferUni {

    public static void main(String[] args){

    }

    public boolean StringBuff(StringBuffer sbOne, StringBuffer sbTwo){
        sbTwo = sbOne;
        if(sbTwo==sbOne){
            return true;
        }

        else{
            return false;
        }
    }
}

这是我的 JUnit 测试:

package StringBufferJUni;

import static org.junit.Assert.*;

import org.junit.Test;

public class JUnitStringBuffer {

    @Test
    public void test() {
        StringBuffer sbOne = new StringBuffer("hello");
        StringBuffer sbTwo = new StringBuffer("hello");
        StringBufferUni stBuffer = new StringBufferUni();
        boolean hel = stBuffer.StringBuff(sbOne, sbTwo);
        assertEquals(true, hel);
    }

}

这实际上是由于引用指向同一个对象而传递的吗?

这一行:

sbTwo = sbOne;

正在将一个对象 reference 设置为另一个对象的值。

这一行:

if( sbTwo==sbOne )

正在比较两个 references 是否相等,由于上面的行,这将始终为真。

它不会比较对象本身的任何内容(即:它 sbOne.equals(sbTwo) 不同

如果你想判断引用是否指向同一个对象,那么你只需使用:

if (sbTwo==sbOne)

并删除行:sbTwo=sbOne

为了进一步考虑,这个测试说明了你在做什么:

@Test
public void test() {
    StringBuffer sb1 = new StringBuffer("hello");
    StringBuffer sb2 = sb1;

    assertTrue(sb1 == sb2);  // this will pass, same object reference

    sb2 = new StringBuffer("hello");  // create a new object

    assertFalse(sb1 == sb2);  // this will be false, since the objects may be equal, but the references are not.
}