Basic of JUnit 4

DevOps 2014. 4. 22. 02:07

기본 적인 튜토리얼은 첨부 문서 참조 또는 다른 참고를 하도록 하고 한가지의 예제와 주의 사항을 정리한다.

 

예제.

테스크 클래스를 작성하기 위하여 Eclipse에서 제공되는 메뉴를 사용한다.



위의 클래스는 세금 계산을하는 인터페이스와 인터페이스를 구현한 클래스가 존재하는데 인터페이스를 지정하여 테스트 클래스를 생성한다.


테스트 클래스를 동일한 패키지 구조에 생성하되 생성되는 디렉토리를 별개로 구성하면 관리가 편리할것 같다.(메이븐 프로젝트 처럼)



테스트 하고자하는 메소드를 선택한다.

 

위의 작업을 마치면 테스트 케이스가 만들어지는데 (기본 생성된 소스는 다른자료 참조) 적절히 파라미터를 위한 테스트 케이스로 다음과 같이 수정한다.


package com.common.tax;

 

import java.util.Arrays;

import java.util.Collection;

 

import org.junit.Assert;

import org.junit.BeforeClass;

import org.junit.Test;

import org.junit.runner.RunWith;

import org.junit.runners.Parameterized;

import org.junit.runners.Parameterized.Parameters;

 

/**

 * @author Steven J.S Min

 * 파라미터로 사용할 클래스는 RunWith어노테이션과 함께 사용할 클래스를 구체화 해야한다.

 */

@RunWith(Parameterized.class)

public class TaxCalculatorTest {

 

       private static TaxCalculator calculator;


       // 테스트에 사용할 매개변수 유형에 대한 클래스 멤버를 만든다.

       private double revenue;

       private int year;

       private double expectedTax;


      /**

       * 파라미터로 사용할 테스트 데이터.

       * Collection 유형을 반환하는 static 피더 메서드를 작성하고 @Parameter 주석으로 표시한다.

       */ 

       @Parameters

       public static Collection data() {

              return Arrays.asList(new Object[][] {

                           { 0.00, 2006, 0.00 },

                           { 10000.00, 2006, 1950.00 },

                           { 20000.00, 2006, 3900.00 },

                           { 38000.00, 2006, 7410.00 },

                           { 38001.00, 2006, 7411.00 },

                           { 40000.00, 2006, 8070.00 },

                           { 60000.00, 2006, 14670.00 },

                           { 100000.00, 2006, 30270.00 }

              });

       }

 

      /**

       * 매개변수 유형을 사용하고 이를 세 번째 단계에서 정의한 클래스 멤버와 연결하는 생성자를 만든다.

       */

       public TaxCalculatorTest(double revenue, int year, double expectedTax) {

              this.revenue = revenue;

              this.year = year;

              this.expectedTax = expectedTax;

       }

 

       @BeforeClass

       public static void initObject() {

              calculator = new TaxCalculatorImpl();

       }

 

       @Test

       public void testCalculateIncomeTax() {

              double calculatedTax = this.calculator.calculateIncomeTax(year, revenue);

              Assert.assertEquals(expectedTax, calculatedTax, 0.00);

       }

 

}

 

 


이때 주의 것은 @BeforeClass 선언되어 있는 메소드는 Static으로 선언되어야 테스트시 오류가 발생하지 않는다.(해당 참조되는 로컬변수도  Static으로 해야겠지) @Before와는 다르게 클래스에서 한번만 실행되는 메소드이다 보니 스태틱으로 선언해야 하는가보다.


파라미터 에의한 테스트 케이스 작성시에는 해당클래스의 인스턴스 라이프싸이클을 명확히 이해 해야할것 같다. 그렇지 않으면 원치않는 값들이 설정될 수있는데 이는 각 테스트 데이터마다 실행될때 최기화가 되며 이는 JUnit 4가 이 클래스를 실행할때, 테스트에 사용할 데이터의 모음으로 각각의 행을 인스턴스로 생성한다는 것이다.



위의 다섯번째 테이스 케이스가 실패가 났는데 일부러 테스트로 실패를 낸것이다.

위와같이 파라미터를 이용하여 테스트 하는 경우 파라미터만큼 테스터를 반복한 결과를 보여준다.

 



참고자료




UnitTest.zip


j-junit4-pdf.pdf


JUnit 4로 뛰어들기.pdf


 http://netrance.blog.me/110175894518





 

 

Posted by Steven J.S Min
,