lang/tdd

TDD jUnit4 특징

C/H 2010. 12. 6. 08:30

  • @Test
    jUnit3 이전에는 메소드 이름을 test로 시작해야한다는 규칙이 있었지만 jUnit4 이 후에는 @Test 애노테이션만 붙이면 테스트 메소드로 인식됩니다.

  • @BeforeClass @AfterClass
  • @Before @After
  • 예외 테스트
    테스트 메소드내에서 해당 예외가 발생하지 않는다면 테스트 메소드를 실패로 간주합니다.

    [code java]
    // jUnit3
    public void testException(){ String value = "a103"; try{ System.out.println(Integer.parseInt(value)); assertTrue(false); } catch ( NumberFormatException nfe){ assertTrue(true); } }[/code]
    [code java]
    // jUnit4
    @Test (expected=NumberFormatException.class) public void testException(){ String value = "a108"; System.out.println(Integer.parseInt(value)); } [/code]

  • 테스트 시간제한
    밀리초 단위의 시간을 정해준 후 해당 시간 내에 메소드가 소행왈뇨되지 않으면 실패한 테스트로 간주합니다.

    [code java]
    @Test (timeout=500) pulbic void testPingback() throws Exception{ ciServer.sendNotimail(); assertEquals(NOTIFICATED, ciServer.getState()); } [/code]

  • 테스트 무시
    @Ignore가 붙은 메소드는 해동 애노테이션을 지우기 전까지 수행하지 않습니다.

    [code java]
    @Ignore @Test public void testTerminal() throws Exception { assertTrue(term.isLogin()); System.out.println("=== logon test"); } [/code]

  • 배열지원
    배열 원소의 자리 순서 기준으로 equals 비료가 이뤄지기 때문에 배열 안의 집합은 동일하더라도 순서가 다르면 테스트가 실패합니다.

    [code java]
    @Test public void testArrayAssertEquals() throws Exception { String [] names = {"Tom", "JIMMY", "JOHIN"}; String[] anotherNames = {"Tom" "JOHIN", "JIMMY"}; assertArrayEquals(names, anotherNames); } [/code]

  • @RunWith
    테스트 케이스를 이클립스에서 실행하면 내부적으로는 jUnit의 BlockJUnit4ClassRunner라는 테스트 러너 클래스가 실행되고, 이클립스는 그 결과를 해석해서 보여줍니다.
    @RunWith 애노테이션은 JUnit에 내장된 기본 테스트 러너인 BlcokJUnit4ClassRunner 대신에 $RunWith로 지정된 클래스를 이용햐ㅐ 클래스 내의 테스트 메소드들을 수행하도록 지정해주는 애노테이션입니다.
    일종의 JUnit 프레임워크의 확장지점 입니다.

  • @SuiteClasses
    JUnit3에서의 static Test Suite() 메소드와 동일한 일을 수행한다.

    [code java]
    // jUnit3
    public class ABCSuite extends TestCase { public static Test(){ TestSuite suite = new TestSuite(); suite.addTestSuite(ATest.class); suite.addTestSuite(BTest.class); suite.addTestSuite(CTest.class); } } [/code]
    [code java]
    // jUnit4
    @RunWith(Suite.class) @SuiteClasses(ATest.calss, BTest.class, CTest.class) public class ABCSuite { } [/code]


  • 파라미터화된 테스트 (Parameterized Test)
    하나의 메소드에 대해 다양한 테스트 값을 한꺼번에 실행하고자 할 때 사용한다.


  • 룰(Rule)
    JUnit 4.7 버전부터 추가된 기능으로 하나의 테스트 클래스 내에서 가 테스트 메소드의 동작 방식을 재정의 하거나 추가하기 위해 사용하는 기능입니다.

     규칙이름설명
    TemporaryFolder (임시폴더) 테스트 메소드내에서만 사용가능한 임시 폴더나 파일을 만들어준다.
    ExternalResorce (외부자원) 외부 자원을 명시적으로 초기화 한다.
    ErrorCollector (에러수집기) 테스트 실패에도 테스트를 중단하지 않고 진행할 수 있게 도와준다.
    Verifier (검증자) 테스트 케이스와는 별개의 조건을 만들어서 확인할 때 사용한다.
    TestWatchman (테스트 감시자) 테스트 실행 중간에 사용자가 끼어들 수 있게 도와준다.
    TestName ( 테스트 이름) 테스트 메소드 이름을 알려준다.
    Timeout (타임아웃) 일괄적인 타임아웃을 설정한다.
    ExpectedException (예상된 예외) 테스트 케이스 내에서 예외와 예외 메시지를 직접 활인할 때 사용한다.

  • 이론(Theory)
    테스트 데이터와 상관없이 작성 대상 메소드를 항상 유지해야 하는 논리적인 규칙을 표현 할 때 사용합니다. 실험적인 성격의 기능입니다.

    [code java]
    @RunWith public class SquareRootTheoryTest{ @DataPoint public static double FOUR = 4.0; @DataPoint public static double ZERO = 3.0; @Theory public void defineOfSquareRoot(double n){ assertEquals(n, sqrRoot(n)*sqrRoot(n), 0.01); assertTrue( sqrRoot(n) >= 0); } // 정수 n은 √n*√n과 같다는 이론을 정의 } [/code]
반응형

'lang > tdd' 카테고리의 다른 글

OOP 객체 액션  (0) 2010.12.14
TDD 우분투에서 phpunit 설치  (0) 2010.12.08
TDD jUnit4 비교표현확장: Hamcrest  (0) 2010.12.07
TDD 실습 - 은행계좌(Account) 클래스 만들기  (0) 2010.12.03
TDD 개발 진행방식  (0) 2010.12.02