JUnit으로 테스트 작성하기
1. 단위 테스트 구조화

■ 테스트에 필요한 모든 조건과 상황을 준비 설정한다.(필요한 객체를 모두 생성하기, 필요한 자원을 모두 할당하기 등)
■ 테스트 대상이 되는 메서드를 호출
■ 테스트 대상이 되는 메서드가 원하는 대로 동작한다는 것을 검증한다.
■ 리팩토링

2. JUnit의 단정 메서드

assertEquals
 assertEquals([String message], expected, actual, tolerance)
 
 예) assertEquals("Should be 3 1/3", 3.33, 10.0/3.0, 0.01);
 
assertNull
 assertNull([String message], java.lang.Object object)
 
 assertNotNull([String message], java.lang.Object object)
 
 인자로 넘겨받은 객ㄹ체가 null인지(또는 null이 아닌지) 판정하고, 반대인 경우 실패로 처리.

assertSame
 assertSame([String message], expected, actual)
 
 assertNotSame([String message], expected, actual)
 
 expected와 actual이 같은 객체를 참조하는지 아닌지를 판정.

assertTrue

 assertTrue([String message], boolean condition)
 
 assertFalse([String message], boolean condition)
 
 boolean 조건이 참인지 아닌지 판정

fail

 fail([String message])
 
 테스트를 바로 실패처리. 절대 수행되지 않아야 될 부분(예외가 발생되는 부분 다음)을 표시하는데 사용.
 
3. JUnit 프레임워크

import junit.framework.TestCase;

public class LargestTest extends TestCase {
    private Largest largest;
    
    /*
     * 각각의 테스트 메서드들이 실행되기 전에 호출된다.
     */
    protected void setUp() throws Exception {
        largest = new Largest();
    }
    
    /*
     * 각각의 테스트 메서드들이 실행되고 난 다음에 호출된다.
     */
    protected void tearDown() throws Exception {
        super.tearDown();
    }

    /*
     * Test method for 'tdd.junit.ch2.Largest.largest(int[])'
     */
    public void testLargest() {
        assertEquals(9, largest.largest(new int[] {9,8,7}));
        assertEquals(-7, largest.largest(new int[] {-9,-8,-7}));
    }
}

4. JUnit 테스트 조합

여러개의 테스트 케이스를 통합한 것을 테스트 스위트(TestSuite)라고 한다. 테스트 스위트를 작성해 두면 여러개의 테스트 케이스를 한 번에 실행시킬 수 있다.

import junit.framework.Test;
import junit.framework.TestSuite;

public class AllTests {
   public static Test suite() {
       TestSuite suite = new TestSuite("Test for tdd.junit");
      
       //$JUnit-BEGIN$
       suite.addTestSuite(TestJukebox.class);
       suite.addTestSuite(TestMyStack.class);
       //$JUnit-END$
      
       return suite;
   }
}

5. JUnit 사용자 정의 단정 메서드

경우에 따라 사용자 정의 단정 메서드를 만들어야 할 경우 작성.

import junit.framework.*;

/**
 * Project-wide base class for Testing
 */
public class ProjectTest extends TestCase {
    /**
     * Assert that the amount of money is an even
     * number of dollars (no cents)
     *
     * @param message Text message to display if the assertion fails
     * @param amount Money object to test
     */
    public void assertEvenDollars(String message, Money amount) {
        assertEquals(message, amount.asDouble() - (int)amount.asDouble(), 0.0, 0.001);
    }

    /**
     * Assert that the amount of money is an even
     * number of dollars (no cents)
     *
     * @param amount Money object to test
     */

    public void assertEvenDollars(Money amount) {
        assertEvenDollars("", amount);
    }
}

이를 사용하기 위해서는 TestCaset를 바로 상속하지 않고 이 기반 클래스를 상속하여 사용.

6. JUnit과 예외

[테스트 메서드내 예외 선언]

public void testForException() {
    try{
        sortMyList(null);
        fail("Should have thrown an exception"); /* 예외발생시 실패 선언 */
    } catch(RuntimeException e) {
        assertTrue(true); /* 성공처리 선언 - "제어 흐름이 반드시 여기를 지나야 한다"는 문서화 역할  */
    }
}

[테스트 메서드 예외 선언]

public void testData1 throws FileNotFoundException {
    FileInputStream in = new FileInputStream("data.txt");    
}
by 이종화 | 2006/04/24 12:48 | Agile Methodology | 트랙백(1) | 핑백(1) | 덧글(0)
트랙백 주소 : http://ingenuity.egloos.com/tb/1859533
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]
Tracked from 고안해 내는 재능 at 2007/05/30 13:40

제목 : JUnit 4로 뛰어들기
jUnit 3.8 : JUnit으로 테스트 작성하기jUnit 4 : http://www.ibm.com/developerworks/kr/library/tutorial/j-dw-java-junit4.html...more

Linked at 큐투츠의 블로그 : 유용한 at 2009/10/27 15:11

... t<E>에서 E가 뭐지 아니?) : http://nstyle.egloos.com/2114085 JUnit : http://ingenuity.egloos.com/1859533 ... more

:         :

:

비공개 덧글

< 이전페이지 다음페이지 >