2012-04-30 1 views
1

...여기에 Asserts Equality 란 무엇입니까? 아마도 지망생 개발자를 테스트하기 위해이 웹 사이트를 찾을 수

http://www.devchallenge.co.uk/challenge-2

질문은 이것입니다 ... 를 반환합니다 다음 테스트의 주어진 코드를 기반으로

'true'대답과 패스, 그리고 'false'응답을 반환하고 이 실패합니까?
ArrayList array1 = new ArrayList(); 
ArrayList array2 = new ArrayList(); 

array1.add(1); 
array1.add(2); 
array1.add("Aviva"); 

array2.add(1); 
array2.add(2.0); 
array2.add("Aviva"); 

Asserts 
    Equality 
     (array1[0],array2[0]); 

Asserts 
    Equality 
     (array1[1],array2[1]); 

Asserts 
    Equality 
     (array1[2],array2[2]); 

는 분명히 대답은 '실패', '실패', '패스'입니다.

저는 Java 개발자가 아닙니다. Java로이 도전이 있다고 가정하고 있습니다.

평등이란 무엇입니까? 동일한 오브젝트 또는 동일 을 확인하고 있습니까? 일부 객체는 Java에서 String/Integer 풀로 인턴되기 때문에 왜 마지막 객체가 사실인지 이해할 수 있습니다. 그러나 왜 처음이 사실이 아닌가?

+0

이러한 어설 션은 의사 코드이므로 확실한 대답은 없습니다. 그러나 저는 "평등"이란 "equals"를 호출 한 결과를 의미합니다. –

+0

@Marko 네, 그렇게 생각했습니다. 그래서 평등 (array1 [0], array2 [0])이 참이 될 것으로 기대합니까? 값이 같기 때문에 ... –

+1

예. 나는 그 사이트에 갔다, 그것은 약간의 허튼 소리처럼 보인다. 그들이 특정의 컴파일 가능한 코드를 제공하지 않는다면 그들은 모든 대답이 정확하다고 주장 할 수 있습니다. –

답변

1

이것은 유효한 Java 구문이 아닙니다. Asserts Equality()으로 전화 할 수 없습니다.

JUnit 테스트에서 어설 션으로이 값은 Assert.assertEquals(array[0], array2[0])이어야하며 이는 두 개를 비교하게합니다. Integer. 그래서 이것은 통과해야합니다.

그래서 제안 된 코드 결과도 이해할 수 없습니다. 나는 통과, 실패, 통과가 옳다고 말할 것이다.

+0

그래, 확실히 그럴 가능성이 더 높다고 생각했다. –

+0

그냥 확인했다. assert (1.0 == 1)은 java에서 전달되므로 트리플 패스는 ... – Miquel

+1

@Miquel : 여기에 기본 유형이 없습니다. 콜렉션은 오직 객체 만 가질 수 있기 때문에 값은 자동적으로'Integer'와'Double'으로 변환됩니다. Assert는 assert.assertEquals (Integer.valueOf (1), Double.valueOf (1.0)); (false를 반환합니다)와 같은 이유입니다. – Kai

1

스칼라가 다른 객체 홀더를 가지므로 == 테스트는 false이지만 컴파일러가 동일한 정확한 문자열을 확인하므로 문자열이 == 테스트를 통과합니다 상수로 사용됩니다. .equals() 테스트를 고려 중이라면 모두 평등합니다.

+0

나는 이것이 C# (like) 일 수 있다고 생각한다. 처음 생각부터 autoboxing을 가지고있다. –

+0

당신의 의견으로는 정확한 Java 지식을 가진 사람이 정확하게 대답 할 수있을만큼 명확한 질문이 있습니까? –

+0

또한 정수가 정수 풀에 수용되지 않으므로'=='은 어쨌든'true'를 나타낼 것입니까? –