반응형
오랜만에 포스팅이다.
자바 웹 관련 개발자들과 애기하다보면 JUnit에 대한 이야기가 늘 나온다. 사실 난 그동안 테스는 main()을 통해서만 테스트만 해왔었다. 업무적으로 JUnit을 써볼 기회가 많지도 않긴 했지만 전문가와 단위테스트에 대한 이야기가 나왔는데 내가 추상적으로 이야기했더니 무시를 당했다. 내가 화술이 부족해서(모르는 것도 아는 것처럼, 아는 것은 더 부풀려서 하는) 그럴수도 있지만, 사실 알고만 있을뿐 내가 개발에 직접 사용해보지 않았으니까 그러려니 했다.
그리고 오늘 웹에서 자료를 찾아가며 사용해보았는데, 이것은 신세계였다. 그동안 난 일부 기능들에 대한 테스트를 각 main()을 통해 하였는데 사실 지저분하고 매우 번거로운 작업이다. 각 테스트를 위한 코드를 작성했다가 주석처리를 하면서 지저분한 테스트 코드를 짜곤 했다. 그런데 JUnit은 정말 깔끔하다.
나 이외에 JUnit을 써보지 않은 자바 개발자가 있다면 이제는 꼭 JUnit을 사용하길 권장한다.
JUnit (http://www.junit.org/)
JUnit은 단위 테스트용 개발자 유틸리티로서 현재 이클립스에 기본적으로 포함(하나의 jar로 구성)되어 있다. 테스트 결과 에러 확인 및 최적 코드를 유추 가능하다.
현재 JUnit은 3버전과 4버전이 나와있다. 3에서는 TestCase클래스를 상속받고 테스트 코드를 작성했지만 4에서는 @Annotation이라는 기능을 사용하여 보다 편리하게 작성할 수 있다.
JUnit3
JUnit 4
// 단위 테스트 제외
// 단위 테스트 제외 및 설명
// 단위 테스트 메소드 전 실행
// 단위 테스트 메소드 후 실행
// 단위 테스트 전 한번만 실행
// 단위 테스트 후 한번만 실행
실행
처음에 실행을 어떻게 하는지 몰라서 main()으로 실행해야 하는지 착각을 했었따. ^^;
Junit 코드를 작성하고 나면, Run >> Run as >> Junit Test 가 나온다. 이걸로 실행하면 됀다.
나같은 경우는 안드로이드 SDK도 같이 깔려있어서 그런지 다음과 같은 선택창이 떴다. Eclipse Junit Launcher를 선택해주자. (후에 안드로이드 형태도 테스트 해보아야 겠다.)
실행 결과는 다음과 같다. 각 메소드별 테스트 시간 및 성공 여부가 나오며, 에러가 날 경우 하단에 Failure Trace에 이유를 표시해준다. 혹시나 이 창이 없다면 Window >> Show View >> other >> Java > Junit 을 선택해서 열면 되겠다.
자바 웹 관련 개발자들과 애기하다보면 JUnit에 대한 이야기가 늘 나온다. 사실 난 그동안 테스는 main()을 통해서만 테스트만 해왔었다. 업무적으로 JUnit을 써볼 기회가 많지도 않긴 했지만 전문가와 단위테스트에 대한 이야기가 나왔는데 내가 추상적으로 이야기했더니 무시를 당했다. 내가 화술이 부족해서(모르는 것도 아는 것처럼, 아는 것은 더 부풀려서 하는) 그럴수도 있지만, 사실 알고만 있을뿐 내가 개발에 직접 사용해보지 않았으니까 그러려니 했다.
그리고 오늘 웹에서 자료를 찾아가며 사용해보았는데, 이것은 신세계였다. 그동안 난 일부 기능들에 대한 테스트를 각 main()을 통해 하였는데 사실 지저분하고 매우 번거로운 작업이다. 각 테스트를 위한 코드를 작성했다가 주석처리를 하면서 지저분한 테스트 코드를 짜곤 했다. 그런데 JUnit은 정말 깔끔하다.
나 이외에 JUnit을 써보지 않은 자바 개발자가 있다면 이제는 꼭 JUnit을 사용하길 권장한다.
JUnit (http://www.junit.org/)
JUnit은 단위 테스트용 개발자 유틸리티로서 현재 이클립스에 기본적으로 포함(하나의 jar로 구성)되어 있다. 테스트 결과 에러 확인 및 최적 코드를 유추 가능하다.
현재 JUnit은 3버전과 4버전이 나와있다. 3에서는 TestCase클래스를 상속받고 테스트 코드를 작성했지만 4에서는 @Annotation이라는 기능을 사용하여 보다 편리하게 작성할 수 있다.
JUnit3
import org.junit.Test;
import junit.extensions.TestSetup;
import junit.framework.TestCase;
import junit.framework.TestSuite;
public class Tester extends TestCase{
public void testGetCurrentVersion(){
assertEquals(new Atin().getCurrentVersion(), "Version 1.0");
}
public void testGetCurrentVersion2(){
assertEquals(new Atin().getCurrentVersion(), "Version 1.0");
}
public Tester(String method){
super(method);
}
public static junit.framework.Test suite(){
TestSuite suite = new TestSuite();
// 다음 추가하는 메소드명만 단위테스트함
// 다음 추가하는 메소드명만 단위테스트함
suite.addTest(new Tester("testGetCurrentVersion"));
suite.addTest(new Tester("testGetCurrentVersion2"));
TestSetup wrapper = new TestSetup(suite){
// 메소드 실행 전 작업
// 메소드 실행 전 작업
protected void setUp(){
System.out.println("Start");
}
// 메소드 실행 후 작업
protected void tearDown(){
System.out.println("End");
}
};
return wrapper;
}
}
JUnit 4
import static org.junit.Assert.assertEquals;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Ignore;
import org.junit.Test;
public class Tester4 {
// 실행할 메소드 위에 Test라고 하면 해당 메소드를 단위 테스트함
// 실행할 메소드 위에 Test라고 하면 해당 메소드를 단위 테스트함
@Test
public void testGetCurrentVersion(){
System.out.println("1");
assertEquals(new Atin().getCurrentVersion(), "Version 1.0");
}
// 단위 테스트 제외
@Ignore
public void testGetCurrentVersion2(){
System.out.println("2 s");
assertEquals(new Atin().getCurrentVersion(), "Version 2.0");
}
// 단위 테스트 제외 및 설명
@Ignore("제명이 됐어요")
public void testPlusString(){
System.out.println("2 s");
assertEquals(new Atin().plusString("A", "BC"), "ABC");
}
// 단위 테스트 메소드 전 실행
@Before
public void before(){
System.out.println("Before");
}
// 단위 테스트 메소드 후 실행
@After
public void after(){
System.out.println("After");
}
// 단위 테스트 전 한번만 실행
@BeforeClass
public static void beforeClass(){
System.out.println("BeforeClass");
}
// 단위 테스트 후 한번만 실행
@AfterClass
public static void afterClass(){
System.out.println("AfterClass");
}
}
기타 참고
@Test(timeout = 1000) : 시정한 시간이 경과 하면 test fail. (miiseconds)
실행
처음에 실행을 어떻게 하는지 몰라서 main()으로 실행해야 하는지 착각을 했었따. ^^;
Junit 코드를 작성하고 나면, Run >> Run as >> Junit Test 가 나온다. 이걸로 실행하면 됀다.
나같은 경우는 안드로이드 SDK도 같이 깔려있어서 그런지 다음과 같은 선택창이 떴다. Eclipse Junit Launcher를 선택해주자. (후에 안드로이드 형태도 테스트 해보아야 겠다.)
실행 결과는 다음과 같다. 각 메소드별 테스트 시간 및 성공 여부가 나오며, 에러가 날 경우 하단에 Failure Trace에 이유를 표시해준다. 혹시나 이 창이 없다면 Window >> Show View >> other >> Java > Junit 을 선택해서 열면 되겠다.
Reference
JUnit4 Annotation설명(http://jjeong.tistory.com/373)
JUnit 설명 (http://blog.naver.com/julymorning4?Redirect=Log&logNo=100019158166)
단위 테스트 설명 및 JUnit 3 코딩 설명(http://shinewithme.tistory.com/476)
추가 Reference ( TDD와 JUnit에 대해 잘 소개해놓은 곳을 찾았다.)
[1] Junit을 이용한 효율적인 테스트 전략 (http://www.javajigi.net/pages/viewpage.action?pageId=278)
[2] TDD 및 JUnit (http://www.javajigi.net/display/OSS/TDD)
반응형
'Devlopment > Unit Test' 카테고리의 다른 글
[PowerMock] Class.class mock 처리하기 (0) | 2017.11.27 |
---|---|
PowerMock 테스트, 객체 생성시 예외 발생 (0) | 2017.11.19 |
java Reflection을 이용한 테스트 (0) | 2017.11.19 |
JUnit – 파라미터 테스트 (Parameterized Test) (0) | 2017.11.18 |
Powermock maven 설정 (0) | 2017.11.07 |
테스트 주도 개발(Test Driven Development) 1 (0) | 2011.05.24 |