참고 : http://today.java.net/pub/a/today/2006/12/07/junit-reloaded.html

Metrix Reloaded를 패러디 한 듯한 제목으로 java.net에 글이 올라왔습니다. 주 내용은 어노테이션을 활용한 JUnit4 활용 예제들이였습니다.

먼저 TestCase 클래스를 상속 받지 않아도 된다는 점.
테스트 메소드의 이름이 test로 시작하지 않아도 된다는 점.(@Test 어노테이션을 사용하면 됩니다.)
setUp() 메소드 대신에 @Before 어노테이션을 사용하면 된다는 점.

저는 위 세가지 정도만을 가지고 유용하게 사용하고 있었습니다. 하지만 이밖에도 몇가지 유용해 보이는 어노테이션들이 있어서 정리해 둡니다.

1. @Before 와 @After는 여러 개가 사용될 수 있는데 여러 개의 Before들 중에 무엇이 먼저 실행될지는 알 수 없다.

2. Exception이 발생하는 경우 @Test(expected = Exception.class) 와 같이 선언해주면 try-catch문을 쓰지 않아도 된다.

3. @Test(timeout = 5000) 이런식으로 해당 메소드 수행 시간 제한을 둘 수 있다. 성능 테스트를 할 때 유용할 것 처럼 보인다.

4. @Ignore("메시지") 를 사용해서 잠시 "메시지"로 인해서 이 메소드를 테스트 대상에서 제외 할 수 있다.

5. Test Suite 만다는 방법이 계속 외워지지 않는다.
[#M_more..|less..|
@RunWith(value=Suite.class)
@SuiteClasses(value={CalculatorTest.class, AnotherTest.class})
public class AllTests {...}
코드 출처 :
http://today.java.net/pub/a/today/2006/12/07/junit-reloaded.html_M#]
6. 같은 테스트를 파라미터만 다르게 테스트를 할 수 있다.
[#M_more..|less..|
@RunWith(value=Parameterized.class)
public class FactorialTest {

   private long expected;
   private int value;

   @Parameters
   public static Collection data() {
       return Arrays.asList( new Object[][] {
                            { 1, 0 },   // expected, value
                            { 1, 1 },
                            { 2, 2 },
                            { 24, 4 },
                            { 5040, 7 },
                            });
   }

   public FactorialTest(long expected, int value) {
       this.expected = expected;
       this.value = value;
   }

   @Test
   public void factorial() {
       Calculator calculator = new Calculator();
       assertEquals(expected, calculator.factorial(value));
   }
}

코드 출처 : http://today.java.net/pub/a/today/2006/12/07/junit-reloaded.html
_M#]
7. assertEquals(Object o1, Object o2) 조심하기. 이미 한번 대박 삽질을 한 적이 있다.
[#M_ more.. | less.. |
public boolean equals(Object obj) {
       if (obj instanceof Integer) {
           return value == ((Integer)obj).intValue();
       }
       return false;
   }
_M#]