2011년 6월 13일 월요일

Introduce Junit4.0

이 글은 기존에 사용하던 JUnit 3.8.1 버전에서의 Test Case 작성과 JUnit 4.0에서의 Test Case 작성 방법을 비교 설명하여 기존에 JUnit을 사용하던 사용자 중 JUnit 4.0을 처음 접하는 사용자의 이해를 돕는데 있다.
실행 환경

Target Class
아래는 Test 대상 Code다.
package Junit.test;
public class Member {
private String name;
private int age;
private String address;
private String phone;
public String getAddress()
{
return address;
}
public void setAddress(String address)
{
this.address = address;
}
public int getAge()
{
return age;
}
public void setAge(int age)
{
this.age = age;
}
public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}
public String getPhone()
{
return phone;
}
public void setPhone(String phone)
{
this.phone = phone;
}
public String getData() {
return name+" "+age+" "+address+" "+phone;
}
}


Old JUnit Test Case
Target Class을 Test하는 JUnit 3.8.1 버전에서의 Test Case는 다음과 유사할 것이다.
1. Test Case는 “junit.framework.TestCase” 상속 받아야한다.
2. Test Method는 “test”로 시작하는 Method명을 가져야 한다.
3. assert Method을 사용하여 Validate하였다.
4. setup, teardown 메서드을 사용하여 test Method 실행 전, 후 작업을 하였다.
package Junit.test;
import junit.framework.TestCase;
public class junit381TestCase extends TestCase {
public static void main(String[] args) {
junit.textui.TestRunner.run(junit381TestCase.class);
}
protected void setUp() throws Exception {
super.setUp();
System.out.println("SetUP");
}
protected void tearDown() throws Exception {
super.tearDown();
System.out.println("TearDown");
}
public void testName() {
System.out.println("TestName");
String name = "Hurukku";
Member member = new Member();
member.setName(name);
assertEquals(name, member.getName());
}
public void testAge() {
System.out.println("TestAge");
int age = 10;
Member member = new Member();
member.setAge(age);
assertEquals(age, member.getAge());
}
}


JUnit 4.0 Test Case
아래는 JUnit 4.0으로 작성된 Test Case을 보여준다. 가장 눈에 띄는 차이점은 Annotation을 사용하게 되었다는 점이다. 얼핏 보면 전에 다루었던 TestNG Code와 유사하게 보인다.
1. Annotation을 지원한다.
2. junit.framework.TestCase”을 상속 받지 않아도 된다.
3. @Test Annotation을 사용함으로 메서드 명이 더 이상 test로 시작할 필요가 없어졌다.
4. assert Method는 static으로 import해서 사용한다.
5. 필요하면 “junit.framework.JUnit4TestAdapter” 이용하여junit.framework.TestCase”타입으로 리턴한다.
6. setUp(), teardown() Method 각각 @Before, @After Annotation으로 바꾸어서 지정할 있다. 특히 기존에는 setup(), teardown() Method 여러 만들 없었으나 Annotaion 이용함으로 다중 설정이 가능하여졌다.
package Junit.test;
import static org.junit.Assert.assertEquals;
import junit.framework.JUnit4TestAdapter;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
public class junit40TestCase{
@Before
public void runBeforeTest() {
System.out.println("Before");
}
@Before
public void runBeforeTest2() {
System.out.println("Before2");
}
@After
public void runAfterTest() {
System.out.println("After");
}
@Test
public void name() {
System.out.println("TestName");
String name = "Hurukku";
Member member = new Member();
member.setName(name);
assertEquals(name, member.getName());
}
@Test
public void age() {
System.out.println("TestAge");
int age = 10;
Member member = new Member();
member.setAge(age);
assertEquals(age, member.getAge());
}
public static void main(String[] args) {
junit.textui.TestRunner.run(suite());
}
public static junit.framework.Test suite() {
return new JUnit4TestAdapter(junit40TestCase.class);
}
}


One-time set up and tear down
setup(), teardown() Method나 @Before, @After Annotation은 test Method가 실행 될 때 마다 호출 되게 된다. 새로운 버전에서는 test 진행시 한번만 setup, tear down이 되는 Annotation을 지원한다.
- @BeforeCalss : Test Case의 모든 실행 메서드에 앞서 한번만 호출된다.
- @AfterClass : Test Calse의 모든 실행 메서드가 종료된후 최후에 한번만 호출된다.
@BeforeClass
public static void runBeforeClass() {
System.out.println("BeforeClass");
}
@AfterClass
public static void runAfterClass() {
System.out.println("AfterClass");
}


요약
JUnit 4.0은 Annotation을 지원하는등 JDK 5.0 패러다임에 근접하게 발전한 건 사실이다. 하지만 단순히 TestNG와 비교해보면 이미 기존에 나와있던 개념을 적용했을 뿐 그 이상의 발전은 없어 보인다.

JUnit 4.0의 새로운 기능을 요약하면 다음과 같다.
1. JDK 5.0 환경에서 구동된다.
2. “junit.framework.TestCase” Class을 더 이상 상속 받을 필요없다.
3. @Test Annotation을 사용함으로 메서드 명이 더 이상 test로 시작할 필요가 없어졌다.
4. assert Method는 static으로 import해서 사용한다.
5. 필요하면 “junit.framework.JUnit4TestAdapter” 이용하여junit.framework.TestCase”타입으로 리턴할수 있다.
6. setUp(), teardown() Method 각각 @Before, @After Annotation으로 바꾸어서 지정할 있다. 특히 기존에는 setup(), teardown() Method 여러 만들 없었으나 Annotaion 이용함으로 다중 설정이 가능하여졌다.
7. One-time set up, tear down Annotation인 @BeforeClass, @AfterClass을 지원한다.

댓글 없음:

댓글 쓰기

ETL 솔루션 환경

ETL 솔루션 환경 하둡은 대용량 데이터를 값싸고 빠르게 분석할 수 있는 길을 만들어줬다. 통계분석 엔진인 “R”역시 하둡 못지 않게 관심을 받고 있다. 빅데이터 역시 데이터라는 점을 볼때 분산처리와 분석 그 이전에 데이터 품질 등 데이...