2013-04-10 4 views
25

결과 :는 주장과 나는이 같은 몇 가지 검사를

테스트를 실행하면 표준 출력에 각 어설 션 메시지를 인쇄 한 후 어설의 결과에있는 동안 내가 필요로 무엇
@Test 
public void test01() 
{ 
    Position p = getPositionAt('a', 1); 
    assertNotNull("a1 exists", p); 
    assertNotNull("figure exists a1", p.getFigure()); 

    p = getPositionAt('a', 2); 
    assertNotNull("exists a2", p); 
    assertNull("figure exists a2", p.getFigure()); 

    p = getPositionAt('b', 1); 
    assertNotNull("exists b1", p); 
    assertNull("figure exists b1", p.getFigure()); 
} 

.

a1 exists -success 
figure exists a1 -success 
exists a2 -success 
figure exists a2 -succcess 
exists b1 -succcess 
figure exists b1 -failed 

하지만 어떻게 그렇게 :

이 테스트 클래스에서 형식이 필요하다? 나는 JUnit과 새로운 작업을하고있어 전혀 모른다. runnerssuites을 사용하는 방법이 있습니까? 또는 어떤 assertSuccess(), assertFailed() 방법이 존재합니까? 어떤 힌트 주셔서 감사합니다.

+0

을의'message' 매개 변수는 적용 "A1이 존재하지 않습니다 "등 ... – Jonathan

+5

당신이 이것을 원할만한 특별한 이유가 있습니까? –

+1

두 가지 요구 사항은 단위 테스트 세계에서 안티 패턴으로 간주 될 수 있습니다. 테스트에서 한 가지만 주장해야하므로 실패하지 않는 주장을 원할 이유가 없어야합니다.테스트는 자동으로 수행되어야하며 assays에 의한 모든 검사가 수행되므로 수동 검사를 위해 출력물을 필요가 없어야합니다. 실제로, 테이블 구동 테스트를 실행하고 하나의 논리적 인 사실을 확인하기 위해 여러 어설 션 호출을 필요로하는 것과 같은 첫 번째를 원하는 좋은 이유가 있습니다. 그래도 두 번째 조심해. 자동화는 단위 및 회귀 테스트에서 앞으로 나아갈 수있는 유일한 방법입니다. – user7610

답변

18

먼저 확인

try{ 
    someCall(); 
catch(Exception e){ 
    fail(): // exception shouldn't happen, use assertTrue(true) if it should 
} 

가 다시 메시지를 추가하기위한 이러한 방법의 버전이 있습니다를, 두가 문제가 아닙니다. 어설 션이 실패하면 AssertionError 예외가 발생합니다. 이렇게하면이 시점 이후의 어설 션이 검사되지 않습니다. 이 문제를 해결하려면 ErrorCollector을 사용해야합니다.

두 번째로 JUnit에 내장 된 방법이 없다고 생각합니다. 그러나이 주장 포장 그 자신의 방법을 구현할 수 : 주장은 그래서 당신의`assertNotNull` 메시지가 실제로해야, 실패하면 그건 그렇고

public static void assertNotNull(String description, Object object){ 
    try{ 
      assertNotNull(description, object); 
      System.out.println(description + " - passed"); 
    }catch(AssertionError e){ 
      System.out.println(description + " - failed"); 

     throw e; 
    } 
} 
+2

은 함수 내의 assertNotNull이 아니어야합니다. TestCase.assertNotNull? – IHeartAndroid

2

하나의 최후의 수단 옵션은 각각의 어서 트를 해당 System.out.println과 페어링하는 것이지만 이상적인 것은 아닙니다. 그래도 문제가 해결되지 않으면 문제를 해결할 것입니다.

assertNotNull("exists a2", p); // prints "exists a2" if p is null

성공 메시지를 인쇄에는 특정 값이 없습니다 :

10

모든 assertXXX 방법은 오류에 문자열을 표시 할 수있는 형태를 가지고있다.

EDIT

Junit와는 일반적으로 어설 2 개 형태를 제공한다. 위의 예를 따르십시오, 당신은 1 2의 방법으로 null 값을 테스트 할 수 있습니다 :

assertNotNull(p)

또는

assertNotNull("my message on failure", p)

프레임 워크가 필요없이 다른 노력으로 오류 메시지를 출력합니다 (프레임 워크에 의해 제공됩니다).

다음과 같은 패턴을 사용하는 것이 예외를 테스트하려면 :

API

+0

좋아, 그럼, 내가 assert 앞에 메시지를 이동할 수 있지만 어설 션을 통과하거나 결과 메시지를 인쇄하지 못했습니다 잡을 방법? –

+1

내 대답과 같이 예외를 잡으십시오. 그렇다면 예외를 다시 던지거나 오류 수집기에 함정하십시오. 그렇지 않으면 가양 성이 있습니다. –

+0

assertTrue ("some message", assertion); 메시지는 여전히 인쇄되지 않습니다. –

관련 문제