본문 바로가기

JAVA/Etc.

배열의 길이와 내용을 함께 체크 해야한다. assertArrayEquals

배열의 길이와 내용을 함께 체크하는 assertArrayEquals를 써야함

 

배열이 같다는 테스트 결과가 나오는 이유는, 테스트에서 단순히 두 배열을 비교할 때 그들이 참조하고 있는 내용이 같다고 판단할 수 있기 때문입니다. 이를 조금 더 구체적으로 설명하겠습니다.

1. 배열 객체의 내용 비교

Java에서 배열 비교를 할 때는 두 가지 방법이 있습니다:

  • 참조 비교 (==)
  • 내용 비교 (Arrays.equals())

기본적으로, 배열은 객체이기 때문에 참조(주소) 비교가 일어나지만, 만약 배열의 내용(내부 요소)을 비교하는 메서드를 사용하면 내부의 값이 같으면 같다고 판단될 수 있습니다.

2. 두 배열의 내용

  • String[] result3 = {""};: 이 배열은 길이가 1인 배열이며, 그 첫 번째 요소로 빈 문자열 ""을 포함합니다.
  • String[] result = new String[0];: 이 배열은 길이가 0인 배열로, 아무 요소도 없습니다.

이 둘은 배열의 크기가 다르기 때문에 기본적으로는 다릅니다. 하지만, 만약 단순히 배열의 요소를 Arrays.equals()로 비교한다면, 두 배열이 비어 있거나 그 내부 값이 동일하다면 같다고 판단될 수 있습니다. 빈 문자열("")도 내용이 없기 때문에 실제 배열 비교 과정에서 내부 요소의 유사성으로 인해 테스트가 성공할 수 있습니다.

3. 테스트에서 같은 이유

일부 테스트 프레임워크나 유틸리티 클래스(예: Arrays.equals() 메서드)는 배열의 참조가 아닌 배열 내부 요소의 내용을 기준으로 비교합니다. 그 결과, 두 배열의 크기나 내용이 유사하다면 같은 것으로 간주할 수 있습니다. 빈 문자열도 사실상 내용이 없는 문자열이기 때문에 빈 배열과 유사하게 비교될 수 있습니다.

4. 해결 방법

두 배열이 정확히 다른지 확인하고 싶다면, 배열의 길이참조 비교 (==)를 명시적으로 사용하여 테스트하는 것이 좋습니다.

java
코드 복사
// 참조 비교
Assertions.assertFalse(result3 == result);

// 배열 크기 비교
Assertions.assertNotEquals(result3.length, result.length);

이렇게 비교하면, 두 배열이 참조하는 객체가 다르거나 길이가 다른 것을 확실하게 테스트할 수 있습니다.

결론

두 배열이 같다고 나오는 이유는 배열의 내부 요소가 유사하기 때문입니다. 하지만 두 배열의 길이참조를 비교하는 방식으로 비교하면 서로 다른 객체임을 확인할 수 있습니다.