단위테스트하면 먼저 떠오르는것이 JUnit 인데요.
평소에는 사용할 일이 없으니깐 공부나 해놓겠다고 실용주의 프로그래머를 위한...시리즈를 사놓은것이
2년은 되어가는듯 합니다. ㅠㅠ
책이 나온것은 2004년이니 지금쯤은 사용하지 않는건 아닌가요..
하지만 아직도 업무환경에서는 JUnit 을 더 많이 사용하는것 같습니다.
CVS 보다 진화되었다는 SVN 이 나왔지만 그래도 CVS 를 고수하는 팀도 많이 있으니깐요.
기본적인 기능을 가지고 있다면 새로운 것이라고 해서
무조건 좋은 것은 아니겠지요.
각각의 툴도 내부적으로 많은 보완이 이루어지고 있으니깐요.
TestNG 도 마찬가지입니다. JUnit 이 가지고 있는 어떤 한계에 대한 보완으로
강력하고 혁신적이며 확장성 있고 유연할뿐 아니라 JDK 5.0 의 어노테이션 기능을
잘 사용할 수 있는 환경을 만들어준다고 합니다.
이러한 이야기가 2005년 이야기입니다.~~
국내에서는 추가적인 자료를 찾기가 JUnit 에 비하면 어렵더군요.
참고할만한 자료로는
JUnit 3.8에서 JUnit 4, TestNG 활용으로
http://younghoe.info/110
Designing for Testability
http://javajigi.tistory.com/186
내용을 요약해보면 사용자들은 JUnit 을 사용하면서
- 모든 코드는 테스트되어야 한다. every single piece of code must be tested.
- 가능한 모든 때에 코드는 독립적으로 테스트되어야 한다. Whenever possible, code must be tested in isolation (using, for example, techniques like mock objects).
- 소프트웨어는 테스트가 쉬워야 한다. Software must be easy testable -- that is, written with tests in mind.
라는 기본적인 규칙을 배웠지만 아래와 같은 제한점을 가지고 있다고 합니다.
- 단일상속 속성때문에 TestCase 클래스 확장시 제한적이다. The need to extend a TestCase class, because the Java language has single inheritance, is very limiting.
- 매개변수들을 테스트메소드에 전달하는 것과 setUp(), tearDown() 메소드에 전달할 수 없다. It is impossible to pass parameters to JUnit's test method as well as to setUp() and tearDown() methods.
- 테스트 클래스는 테스트 메소드가 실행될때마다 다시 인스턴스화된다. The execution model is a bit strange: The test class is reinstantiated every time a test method is executed.
- 복잡한 프로젝트에서 다른 테스트 슈트의 관리는 트릭을 많이 써야 한다. The management of different suites of tests in complex projects can be very tricky.
라는 제약이 있다고 하네요.
TestNG 는 구식 프레임웍의 제한을 없애고 개발자들이 유연하고 강력한 테스트를 작성할 수 있도록 하는 것이 목적이라고 합니다.
테스트 슈트를 정의하기 위해서 JUnit 는 TestSuite, 속성파일, Ant 구현파일들이 필요한데
TestNG 에서는 모든 데이터를 testing.xml 파일에 모아놓는다고 합니다.
또하나의 흥미로운 기능은 테스트 그룹을 정의하는 기능입니다.
모든 테스트 메소드를 한개 이상의 그룹들과 같이 사용할 수 있게 되는 것입니다.
간단하게 @Test 어노테이션의 매개변수로 다음과 같이 지정하면 끝난다고 합니다.
그러면 설정파일 안에서 아래와 같이 찾을 수 있습니다.
그리고 TestNG 에서는 테스트 메소드외에 beforeTestClass, afterTestClass, beforeTestMethod, afterTestMethod 네가지 유형의 수명주기와 관련된 설정 메소드를 사용할 수 있다고 합니다.
참고사이트
http://testng.org
http://code.google.com/p/testng/
평소에는 사용할 일이 없으니깐 공부나 해놓겠다고 실용주의 프로그래머를 위한...시리즈를 사놓은것이
2년은 되어가는듯 합니다. ㅠㅠ
책이 나온것은 2004년이니 지금쯤은 사용하지 않는건 아닌가요..
하지만 아직도 업무환경에서는 JUnit 을 더 많이 사용하는것 같습니다.
CVS 보다 진화되었다는 SVN 이 나왔지만 그래도 CVS 를 고수하는 팀도 많이 있으니깐요.
기본적인 기능을 가지고 있다면 새로운 것이라고 해서
무조건 좋은 것은 아니겠지요.
각각의 툴도 내부적으로 많은 보완이 이루어지고 있으니깐요.
TestNG 도 마찬가지입니다. JUnit 이 가지고 있는 어떤 한계에 대한 보완으로
강력하고 혁신적이며 확장성 있고 유연할뿐 아니라 JDK 5.0 의 어노테이션 기능을
잘 사용할 수 있는 환경을 만들어준다고 합니다.
테스트엔지로 자바 단위 테스트를 쉽게! - JUnit을 능가하는 테스팅 프레임웍
http://www.ibm.com/developerworks/kr/library/j-testng/
http://www.ibm.com/developerworks/java/library/j-testng/
http://www.ibm.com/developerworks/kr/library/j-testng/
http://www.ibm.com/developerworks/java/library/j-testng/
이러한 이야기가 2005년 이야기입니다.~~
국내에서는 추가적인 자료를 찾기가 JUnit 에 비하면 어렵더군요.
참고할만한 자료로는
JUnit 3.8에서 JUnit 4, TestNG 활용으로
http://younghoe.info/110
Designing for Testability
http://javajigi.tistory.com/186
내용을 요약해보면 사용자들은 JUnit 을 사용하면서
- 모든 코드는 테스트되어야 한다. every single piece of code must be tested.
- 가능한 모든 때에 코드는 독립적으로 테스트되어야 한다. Whenever possible, code must be tested in isolation (using, for example, techniques like mock objects).
- 소프트웨어는 테스트가 쉬워야 한다. Software must be easy testable -- that is, written with tests in mind.
라는 기본적인 규칙을 배웠지만 아래와 같은 제한점을 가지고 있다고 합니다.
- 단일상속 속성때문에 TestCase 클래스 확장시 제한적이다. The need to extend a TestCase class, because the Java language has single inheritance, is very limiting.
- 매개변수들을 테스트메소드에 전달하는 것과 setUp(), tearDown() 메소드에 전달할 수 없다. It is impossible to pass parameters to JUnit's test method as well as to setUp() and tearDown() methods.
- 테스트 클래스는 테스트 메소드가 실행될때마다 다시 인스턴스화된다. The execution model is a bit strange: The test class is reinstantiated every time a test method is executed.
- 복잡한 프로젝트에서 다른 테스트 슈트의 관리는 트릭을 많이 써야 한다. The management of different suites of tests in complex projects can be very tricky.
라는 제약이 있다고 하네요.
http://www.theserverside.com/tt/articles/article.tss?l=MigratingtoTestNG
TestNG 는 구식 프레임웍의 제한을 없애고 개발자들이 유연하고 강력한 테스트를 작성할 수 있도록 하는 것이 목적이라고 합니다.
테스트 슈트를 정의하기 위해서 JUnit 는 TestSuite, 속성파일, Ant 구현파일들이 필요한데
TestNG 에서는 모든 데이터를 testing.xml 파일에 모아놓는다고 합니다.
또하나의 흥미로운 기능은 테스트 그룹을 정의하는 기능입니다.
모든 테스트 메소드를 한개 이상의 그룹들과 같이 사용할 수 있게 되는 것입니다.
간단하게 @Test 어노테이션의 매개변수로 다음과 같이 지정하면 끝난다고 합니다.
@Test(groups = {"tests.string"})
그러면 설정파일 안에서 아래와 같이 찾을 수 있습니다.
<groups>
<run>
<include name="tests.string" />
<include name="tests.math" />
<exclude name="tests.boolean"/>
</run>
</groups>
<run>
<include name="tests.string" />
<include name="tests.math" />
<exclude name="tests.boolean"/>
</run>
</groups>
그리고 TestNG 에서는 테스트 메소드외에 beforeTestClass, afterTestClass, beforeTestMethod, afterTestMethod 네가지 유형의 수명주기와 관련된 설정 메소드를 사용할 수 있다고 합니다.
참고사이트
http://testng.org
http://code.google.com/p/testng/
728x90
반응형