[Java] JUnit과 TestNG



Answers

먼저 최신 유행에 맞게 모든 테스트를 다시 작성하지 말라. Junit3은 완벽하게 작동하며 4에서 주석을 도입해도 사용자를별로 사지는 못합니다 (제 의견으로는). 여러분이 테스트를 작성 하는 것이 훨씬 더 중요합니다.

가장 자연스럽게 보이는 것을 사용하고 작업을 완료하는 데 도움이됩니다.

나는 그것을 사용하지 않은 TestNG b / c에 대해서는 언급 할 수 없다. 하지만 어떤 경로를 선택하든 관계없이 JUnit / TestNG / DBUnit / EasyMock의 훌륭한 래퍼 인 unitils 권하고 unitils . (위에서 언급 한 모든 맛을 지원합니다)

Question

직장에서 우리는 현재 JUnit 3을 사용하여 테스트를 진행하고 있습니다. 우리는 새로운 테스트를 작성하기 위해 JUnit 4로 전환하는 것을 고려해 왔지만 지금은 TestNG를 계속 주시하고 있습니다. JUnit 4 또는 TestNG를 사용하여 경험 한 모든 경험은 매우 많은 수의 테스트에서 더 잘 작동하는 것으로 보입니까? 기능 테스트가 광범위한 측면을 다루고 결과를 얻기 위해 다양한 방법으로 작성되어야하기 때문에 테스트 작성에 유연성을 갖는 것도 중요합니다.

오래된 검사는 그들이 일을 제대로 마쳤으므로 다시 쓰지 않습니다. 새로운 테스트에서 볼 수있는 것은 테스트를 작성하고 자연스런 단정, 그룹화 및 테스트 실행을 쉽게 분산 할 수있는 방법의 유연성입니다.




마이크 스톤 (Mike Stone)의 대답에 대한 몇 가지 추가 사항 :

1) TestNG의 그룹을 가장 자주 사용하는 것은 테스트 스위트에서 단일 테스트 메소드를 실행하려는 경우입니다. 이 테스트를 그룹 "phil"에 추가 한 다음이 그룹을 실행하기 만하면됩니다. JUnit 3을 사용할 때 모든 메소드에 대한 항목을 주석 처리하지만 "suite"메소드에서 실행하려는 항목은 주석 처리하지만 일반적으로 체크인 전에 주석을 삭제하는 것을 잊어 버립니다. 그룹과 함께, 나는 더 이상이 문제가 없습니다.

2) 테스트의 복잡성에 따라 JUnit3에서 TestNG로 테스트를 마이그레이션하는 작업은 sed를 사용하여 자동으로 수행 할 수 있으며 TestCase를 대체 할 기본 클래스를 생성하여 모든 TestNG 어설 션 메소드를 정적으로 가져올 수 있습니다.

JUnit에서 TestNG로 마이그레이션하는 방법에 대한 정보는 herehere .




저는 Guice와 TestNG의 깔끔하고 쉬운 통합을 좋아합니다.




나는 오늘 내가 만난 것을 나누고 싶었다. 필자는 Juniper4에서 TestNG와 비교하여 내장 된 매개 변수화 된 러너가 매우 조잡하다는 것을 발견했습니다 (각 프레임 워크는 장점이 있지만 여전히 있습니다). Junit4 주석 @parameters는 한 세트의 매개 변수로 제한됩니다. 동일한 테스트 클래스에서 기능에 대한 유효하고 잘못된 동작을 테스트하는 동안이 문제가 발생했습니다. 따라서 발견 된 첫 번째 공용 정적 주석 메서드가 사용되지만 순서에 관계없이 찾을 수 있습니다. 이로 인해 우리는 다른 클래스를 불필요하게 작성합니다. 그러나 TestNG는 모든 방법에 대해 서로 다른 종류의 데이터 공급자를 제공하는 깔끔한 방법을 제공합니다. 따라서 유효 / 무효 데이터를 별도로 두는 동일한 테스트 클래스에서 유효하고 무효 한 방식으로 동일한 코드 단위를 테스트 할 수 있습니다. 나는 TestNG와 함께 갈 것이다.




TestNG를 진정으로 훨씬 더 강력하게 만드는 것에 대한 의견 :

1.  JUnit still requires the before/after class methods to be static, which limits
    what you can do prior to the running of tests, TestNG never has this issue.

2.  TestNG @Configuration methods can all take an optional argument to their 
    annotated methods in the form of a ITestResult, XmlTest, Method, or 
    ITestContext.  This allows you to pass things around that JUnit wouldn't 
    provide you.  JUnit only does this in listeners and it is limited in use.

3.  TestNG comes with some pre-made report generation classes that you can copy
     and edit and make into your own beautiful test output with very little 
     effort. Just copy the report class into your project and add a listener 
     to run it.  Also, ReportNG is available.

4.  TestNG has a handful of nice listeners that you can hook onto so you can do
     additional AOP style magic at certain phases during testing.



TestNG의 가장 큰 드로어 카드는 지원 테스트 그룹과 더 중요한 것은 테스트 그룹 의존성입니다 (그룹에 의존적 인 것으로 테스트를 표시하면 종속 그룹 실패시 테스트가 단순히 건너 뛰게됩니다).

TestNG의 다른 큰 드로 카드에는 테스트 매개 변수, 데이터 공급자, 주석 변압기 등 활발하고 반응이 빠른 사용자 커뮤니티가 포함됩니다.

표면적으로 위의 TestNGs 기능이 모두 필요하지 않을 수도 있지만, 일단 유연성을 테스트 해보면 JUnit에 어떻게 대처할 수 있었는지 궁금 할 것입니다.

면책 조항 - 나는 JUnit 4.x를 전혀 사용하지 않았으므로 진보 또는 새로운 기능에 대해서는 언급 할 수 없다.




Links