2012-11-12 2 views
3

TDD 환경에서 작업하고 assertTrue를 많이 사용하는 반면 assert equals 등의 다른 많은 메소드가 있지만 40 개 이상의 테스트 케이스가 있고 모두가 있습니다. 단언하십시오. 이게 받아 들일 수 있니?assertTrue를 통한 단위 테스트

나는 스타일로 물어보고 싶었지만 이것이 적절한가요?

제안 사항?

이 질문이 부적절하다고 생각하면 삭제하겠습니다.

편집 : 다른 주장을 사용

assertTrue(targetSpecifiers.size() == 2); 
    assertTrue(targetSpecifiers.get(0).getPlacementId().compareTo(new BigInteger("1")) ==0); 
    assertTrue(targetSpecifiers.get(1).getPlacementId().compareTo(new BigInteger("2")) ==0); 

답변

6

주요 혜택은 더 좋은 의도를 전달하고 장애 발생시보다 의미있는 기본 메시지를 줄 가능성이 있다는 것입니다.

당신이 assertEquals(2, x)x 경우 작성하는 경우

1은 다음 실패 메시지가 될 것입니다 실제로 :

당신이 보는 것 모두가 AssertionError 및 스택 추적입니다 당신이 assertTrue(x == 2)를 작성하는 경우보다 더 많은 도움이 될 것입니다
java.lang.AssertionError: expected:<2> but was:<1> 

.

이것은 TDD를 사용할 때 더욱 중요합니다. 왜냐하면 실패한 테스트를 작성할 때 먼저 테스트가 의도하지 않은 이유로 실패하고 일부 우발적 인 동작이 일어나지 않기를 원하기 때문입니다 에.

4

내 생각 엔 당신이 같은 일을 가지고 있다는 것입니다 : 여전히 옳은 일을 테스트합니다

assertTrue(expectedValue.equals(actualValue)); 

-하지만 실패, 모든이있을 때 당신이 선언이 실패한 것이 었습니다 알 수 있습니다. 대신이를 사용한 경우 :

assertEquals(expectedValue, actualValue); 

는 ... 그 실패는 "예상 : 5; 되었습니까 : 10"말할 것이다하거나 상당히 쉽게 무슨 일이 일어나고 있는지 운동 할 수 비슷한.

boolean 또는 그와 비슷한 메소드를 반환한다고 주장하는 경우가 아니면 assertTrue은 거의 유용하지 않습니다.

어설 션의 예를 제시 할 수 있다면 더 많은 관용적 어설 션으로 변환 할 수 있습니다.

+0

예를 추가했습니다. 감사. – DarthVader

+0

이 예제들은 모두'assertEquals'로 작성하는 것이 더 낫습니다. – mikej

+0

@mikej 예, 저는 assertEquals도 함께 썼습니다. 그러나 그것이 유효한 방식입니다. 그 맞습니까? 유효한? – DarthVader

5

적절한 경우 assertXXX 메서드를 사용하여 오류보고를 개선해야합니다. 예 :당신의 지 어떤지를 판정하는 경우에 우리가 assertEquals

assertEquals("abc", "abxy") 

의 2 문자열 "ABC"(예상)와 "abxy"(실제), 다음 사용하는 것이 더 쉽습니다 더 나은 출력을 제공 할 것입니다 가정 해 봅시다 또한 당신이 실제예상 인수를 지정하는 곳으로주의 :

assertTrue("abc".equals("abxy")) 

다음 주 같은 assertTrue를 사용하는 것보다에 대한 이유. 나는 많은 개발자들이 assertXXX 메소드의 첫 번째 매개 변수가되어야한다는 컨벤션 (junit 's convention)을 따르지 않는 것을 본다. 부적절한 사용은 많은 혼란을 가져옵니다.

2

이러한 어설 션은 완벽하게 유효하지만 다른 어설 션은 읽기 쉽고 더 나은 실패 메시지를 전달하기 쉽습니다.

내가 가장 좋아하는 어설 션 및 오류 메시지 형태를 제공하는 Hamcrest를 살펴 보는 것이 좋습니다.

assertTrue(targetSpecifiers.size() == 2); 
assertTrue(targetSpecifiers.get(0).getPlacementId().compareTo(new BigInteger("1")) ==0); 
assertTrue(targetSpecifiers.get(1).getPlacementId().compareTo(new BigInteger("2")) ==0); 

귀하의 예는

assertThat(targetSpecifiers, hasSize(2)); 
assertThat(targetSpecifiers.get(0).getPlacementId(), equalTo(BigInteger.valueOf(1)); 
assertThat(targetSpecifiers.get(1).getPlacementId(), equalTo(BigInteger.valueOf(1)); 

또는 더 간결

assertThat(targetSpecifiers, contains(
    hasProperty("placementId", equalTo(BigInteger.valueOf(1)), 
    hasProperty("placementId", equalTo(BigInteger.valueOf(2)) 
); 

contains이 완전성과 순서를 확인로 다시 작성할 수 있습니다, 그래서이 세 가지 주장을 다룹니다.