Computer 그리고 Developer/dW

[dW] JUnit과 TestNG 자세히 살펴보기

버리야 2009. 1. 31. 22:40
반응형
JUnit

테스트 픽스쳐는 특정 로직이 테스트 전후에 실행되도록 보장하는 하나의 약정이므로 손쉽게 재활용할 수 있다.
JUnit 4 이전 버전에서는 setUp() 메소드에서 각 메소드마다 필요한 일들을 명시하면, 각 테스트 메소드가 실행되기 전에 각각 한번씩 실행이 되었다.

하지만  픽스쳐에 따른 상당한 오버헤드가 있었고 이 메소드를 한번만 하게 하려면 한번만 실행되도록 지정하는 방법이 번거로웠지만, JUnit 4에서는 모든 테스트에 대해 또는 전체 클래스에 대해 한 번 픽스쳐를 실행하거나, 아예 실행하지 않을 수 있도록 좀더 유연해 졌다.

클래스를 겨냥한 @BeforeClass, @AfterClass : 한 클래스에서 한번만 일어나도 되는 일들을 정의
메소드를 겨냥한 @Before, @After : 각 메소드마다 한번씩 일어나야하는 일들을 정의

매개변수 테스트 작성하기 5단계
  1. 매개변수를 사용하지 않는 일반 테스트를 작성한다.
  2. Collection 유형을 반환하는 static 피더 메서드를 작성하고 @Parameter 주석으로 표시한다.
  3. 첫 번째 단계에서 정의한 일반 메서드에 필요한 매개변수 유형에 대한 클래스 멤버를 만든다.
  4. 이러한 매개변수 유형을 사용하고 이를 세 번째 단계에서 정의한 클래스 멤버와 연결하는 생성자를 만든다.
  5. @RunWith 주석을 통해 Parameterized 클래스와 함께 실행할 테스트 케이스를 지정한다.

exception 테스트 : 특정 유형의 예외가 발생할 경우에 테스트가 통과하는 것.

public void testDivisionByZero() {
try {
int n = 2 / 0;
fail("Divided by zero!");
}

catch (ArithmeticException success) {
assertNotNull(success.getMessage());
}
}



기존에 이렇게 예외처리를 테스트하였다면, JUnit 4에선,

@Test(expected=ArithmeticException.class)
  public void divideByZero() {
int n = 2 / 0;
}
이렇게 exception을 테스트할 수 있다.





테스트 무시하기

이전에 작성했던 테스트 메소드가 지금 당장 무시하고 싶다면!!!
@Ignore를 이용하자~


Timed test

@Test(timeout=2000)
public void remoteBaseRelativeResolutionWithDirectory()
throws IOException, ParsingException {
builder.build("http://www.ibiblio.org/xml");
}




TestNG
Junit4와 마찬가지로 네 가지 유형의 설정 메소드들이 있다.

  • beforeTestClass 메소드 : 테스트 메소드가 실행되기 전, 클래스가 인스턴스로 된 후에 실행된다.
  • afterTestClass 메소드 : 클래스의 모든 테스트 메소드가 실행된 후 이 메소드가 실행된다.
  • beforeTestMethod 메소드 : 클래스의 모든 테스트 메소드가 실행되기 전에 이 메소드가 실행된다.
  • afterTestMethod 메소드 : 클래스의 모든 테스트 메소드들이 실행된 후 이 메소드가 실행된다.

그림 2. 테스트 클래스 수명주기
Lifecycle of a test class


exception  검사
@ExpectedExceptions annotation을 이용.

public class NumberUtilsTest
{
@Test(groups = {"tests.math"})
@ExpectedExceptions(NumberFormatException.class)
public void test()
{

NumberUtils.createDouble("12.23.45");
assert false; //shouldn't be invoked
}

}

추가 : 2009.2.20
기존의 @ExpectedExceptions는 deprecated되어서
@Test(expectedExceptions = " ... ")
이렇게 쓰라고 한다.
 
@Test(expectedExceptions = NumberFormatException.class)


참고
JUnit 4로 뛰어들기
An early look at JUnit 4
예제를 통한 TestNG 살펴보기

테스트엔지로 자바 단위 테스트를 쉽게! 



반응형