2016-12-11 1 views
2

String 형식의 이진수를 Byte 배열로 변환하는 간단한 알고리즘을 작성했습니다. 저는 int를 사용하여 8 비트의 수치를 계산 한 다음 바이트로 캐스팅합니다. 바이트로 캐스팅하는 동안 JUnit 오류가 발생 했습니까?

assertEquals(new byte[] {(byte) 0} , Set1.binToBytes("00000000")); 

그래서 8 제로의 문자열이 0 바이트 발생한다 : 나는의 JUnit에서 다음 코드를 실행하면

문제

가 나타납니다. AssertionError로 끝납니다. 디버깅하는 동안 변수를 추적 할 때, 내가 찾은 다음

예상 : [0] 실제 : [0]

가 오류의 JUnit에서, 아니면 내가 뭔가를 엉망? 위의 두 가지 유형이 서로 다른가요?

java.lang.AssertionError: expected:<[[email protected]> but was:<[[email protected]> 
+0

같음 (및 assertEquals)은 배열 동일성을 검사하지 않습니다.'arr1.equals (arr2)'는'arr1 == arr2' 인 경우에만 true입니다. – user2864740

답변

3

배열이 equals 메소드를 오버라이드 (override)하지 않습니다

전체 JUnit 테스트를 실행 한 후, 나는 다음과 같은 오류를 발견했습니다. 배열을 비교하려면 assertEquals을 사용하지 않아야합니다. 대신 assertArrayEquals을 사용해야합니다

assertArrayEquals(new byte[] {(byte) 0} , Set1.binToBytes("00000000")); 
+1

당신은 assertEquals를 사용하지 말아야한다는 것을 의미합니다. – GregT

+0

@ user1257384 grr, 물론입니다. 바보 같은 오타. – Mureinik

1

또 다른 옵션을 : 단순히 하나가 정말 필요로하는 주장십시오 : assertThat

이 어설 Hamcrest가 정합와 함께 작동; 그래서 당신은 같은 코드 아래로 쓸 수 있습니다 : 한 ...

assertThat(actual, is(expected)) 

그리고 좋은 점을 actualexpected 일치 유형 (단순 객체, 배열, 컬렉션, 당신-이름을) 가지고 ... 위 등 코드는 사용자가해야한다고 생각하는 것을 정확히 수행합니다.

그리고 두 개의 배열을 포함하는 멋진 오류 메시지가 표시됩니다.

익숙해 지 자마자. 어설트의 다른 변형을 사용할 필요가 없다는 것을 알게 될 것입니다.

관련 문제