programing

Java의 assertEquals 메서드는 신뢰할 수 있습니까?

yoursource 2022. 8. 10. 22:59
반응형

Java의 assertEquals 메서드는 신뢰할 수 있습니까?

나는 그것을 알고 있습니다.==두 개를 비교할 때 몇 가지 문제가 있습니다.Strings...인 것 같다.String.equals()더 나은 접근법입니다.JUnit 테스트를 하고 있는데 이 테스트에assertEquals(str1, str2)두 문자열에 동일한 내용이 포함되어 있다고 주장할 수 있는 신뢰할 수 있는 방법입니까?나는 사용할 것이다.assertTrue(str1.equals(str2))그러나 실패 시 예상되는 값과 실제 값을 확인할 수 있는 이점은 없습니다.

이와 관련하여, 페이지 또는 스레드에 대한 링크를 가지고 있는 사람이 있습니까?str1 == str2?

항상 사용해야 합니다..equals()비교해보면Strings자바어.

JUnit은.equals()방법의 동등성을 결정하는 방법assertEquals(Object o1, Object o2).

그래서, 당신은 확실히 안전합니다.assertEquals(string1, string2)(왜냐하면)Strings는Objects)

여기에서는, 다음의 몇개의 차이점에 관한 Stackoverflow질문에 대한 링크를 나타냅니다.==그리고..equals().

assertEquals를 사용합니다.equals비교 방법.다른 주장이 있어요assertSame, 를 사용합니다.==교환입니다.

이유를 이해하다==무엇을 이해하는 데 필요한 문자열과 함께 사용하면 안 됩니다.==does: 아이덴티티 체크를 합니다.그것은,a == b체크하여 여부를 확인합니다.a그리고.b같은 오브젝트를 참조합니다.이것은 언어에 내장되어 있기 때문에, 그 동작은 다른 클래스에 의해서 변경할 수 없습니다.equals반면 메서드는 클래스로 덮어쓸 수 있습니다.디폴트 동작인 동안(에서는)Objectclass)를 사용하여 ID 체크를 수행합니다.==연산자, 다음을 포함한 많은 클래스String대신 "일관성" 검사를 수행하도록 덮어씁니다.의 경우String(확인하지 않고)a그리고.b같은 오브젝트를 참조한다.a.equals(b)는, 참조하는 오브젝트가, 양쪽의 문자열이 완전하게 같은 문자를 포함하고 있는지 확인합니다.

유추 시간: 각각이Stringobject는 무엇인가 쓰여진 종이 한 장입니다."Foo"라고 쓰인 종이 두 장과 "Bar"라고 쓰인 종이 한 장이 있다고 가정해 봅시다.처음 두 장의 종이를 가지고==그것들을 비교하면 그것은 돌아올 것이다.false"이것들이 같은 종이인가요?"라고 묻는 것이기 때문입니다.종이에 쓰여 있는 것을 볼 필요도 없습니다.(같은 종이를 두 번 주는 것이 아니라) 두 장의 종이를 준다는 것은 다시 돌아온다는 것을 의미합니다.false를 사용하면equals,하지만, 그equals는 두 을 알 수 method가됩니다.그러면 반환됩니다.true.

Strings와 혼동되는 점은 Java가 "Interning" Strings라는 개념을 가지고 있으며, 이는 코드 내의 모든 문자열 리터럴에 대해 자동으로 수행된다는 것입니다.즉, 코드에 2개의 동등한 문자열 리터럴이 있는 경우(클래스가 다른 경우에도), 실제로는 같은 문자열 리터럴을 참조합니다.String물건.이렇게 하면==오퍼레이터 리턴true생각보다 더 자주요

간단히 말해, 동일한 문자를 포함하지만 서로 다른 개체(다른 메모리 위치에 있음)인 두 개의 String 개체를 가질 수 있습니다.== 연산자는 두 개의 참조가 동일한 개체(메모리 위치)를 가리키는지 확인하지만 equals() 메서드는 문자가 동일한지 확인합니다.

일반적으로 두 문자열이 동일한 메모리 위치를 가리키는지 여부가 아니라 두 문자열에 동일한 문자가 포함되어 있는지 확인합니다.

public class StringEqualityTest extends TestCase {
    public void testEquality() throws Exception {
        String a = "abcde";
        String b = new String(a);
        assertTrue(a.equals(b));
        assertFalse(a == b);
        assertEquals(a, b);
    }
}

네, 항상 테스트에 사용합니다.테스트 프레임워크는 이러한 비교에 .equals()를 사용할 가능성이 매우 높습니다.

다음 링크에서는 "string equality miss"를 설명합니다.기본적으로 Java의 문자열은 객체이며 객체의 동등성을 비교할 때 일반적으로 내용이 아닌 메모리 주소에 따라 비교됩니다.그 때문에, 2개의 문자열이 같은 주소를 차지하지 않기 때문에, 인쇄했을 때는 같게 되어 있어도, 올바르게 일치하지 않게 됩니다.

http://blog.enrii.com/2006/03/15/java-string-equality-common-mistake/

쥬니트assertEquals(obj1, obj2)정말로 전화한다.obj1.equals(obj2).

그리고 또assertSame(obj1, obj2)어느 쪽인가 하면obj1 == obj2(즉, 다음 사항을 확인합니다.obj1그리고.obj2같은 인스턴스를 참조하고 있다)는 것을 피하고 싶은 것입니다.

그래서 넌 괜찮아.

「그것은,==오퍼레이터는 두 개인지 확인합니다.Objects똑같다Object."

http://leepoint.net/notes-java/data/strings/12stringcomparison.html

String는 입니다.Object비교 규칙의 범주로 분류됩니다.

언급URL : https://stackoverflow.com/questions/1201927/is-javas-assertequals-method-reliable

반응형