JUnit vs 테스트NG
현재 회사에서는 JUnit 3을 사용하여 테스트를 수행하고 있습니다.JUnit 4로 전환하여 새로운 테스트를 작성하는 것을 검토 중이지만, 저는 TestNG를 계속 주시하고 있습니다.JUnit 4와 TestNG 중 어떤 경험이 있으며, 많은 수의 테스트에 더 적합한 것 같습니까?기능 테스트의 범위가 넓어 결과를 얻기 위해서는 다양한 방법으로 작성해야 하기 때문에 쓰기 테스트에 유연성을 갖는 것도 중요합니다.
오래된 테스트는 제 역할을 다하기 때문에 다시 작성되지 않습니다.그러나 새로운 테스트에서 보고 싶은 것은 테스트 작성 방법의 유연성, 자연스러운 주장, 그룹화 및 쉽게 분산되는 테스트 실행입니다.
둘 다 써봤지만, 기존 테스트를 새로운 형식으로 다시 작성하지 말라는 저스틴 스탠다드의 의견에 동의해야 합니다.결정에 관계없이 둘 다 실행하는 것은 매우 간단합니다.TestNG는 JUnit보다 훨씬 더 설정하기 쉽도록 노력하지만 결국 둘 다 똑같이 잘 작동합니다.
TestNG에는 테스트를 특정 그룹으로 마크한 후 특정 그룹의 모든 테스트를 쉽게 실행하거나 특정 그룹의 테스트를 제외할 수 있는 깔끔한 기능이 있습니다.따라서 "저속" 그룹에서처럼 느리게 실행되는 테스트를 표시한 다음 빠른 결과를 원할 때 무시할 수 있습니다.문서에서는 일부 서브셋을 "체크인" 테스트로 표시하여 새 파일을 체크인할 때마다 실행하도록 권장합니다.JUnit에서 그런 특집은 본 적이 없지만, 다시 말하지만, 만약 없다면, 정말 놓치지는 않을 것이다.
하이 컨피규레이션에 관한 모든 주장에도 불구하고, 저는 몇 주 전에 제가 하고 싶은 것을 할 수 없었던 궁지에 몰렸습니다.그게 뭔지 기억할 수 있으면 좋겠지만, 완벽하지 않다는 걸 알게끔 얘기를 꺼내고 싶었어요.
TestNG의 가장 큰 장점은 주석입니다.JUnit이 버전 4에 추가한 것입니다.
먼저, 모든 테스트를 최신 유행에 맞춰 다시 작성하지 말라고 말하고 싶습니다.Junit3는 완벽하게 동작하기 때문에 4개의 주석을 도입해도 별로 도움이 되지 않습니다.너희가 시험지를 작성하는 게 훨씬 더 중요해 그리고 그렇게 들리는 것 같아
가장 자연스러워 보이는 것을 사용하여 작업을 수행할 수 있습니다.
TestNG b/c는 사용하지 않아서 코멘트할 수 없습니다.단, 어떤 루트를 선택하든 JUnit/TestNG/DBUnit/EasyMock의 훌륭한 포장지인 Unitils를 추천합니다.(상기 모든 맛을 지원합니다)
TestNG의 가장 큰 선택 카드에는 지원 테스트 그룹, 그리고 더 중요한 테스트 그룹 의존성이 포함됩니다(테스트를 그룹에 종속된 것으로 표시하면 해당 그룹이 실패했을 때 테스트가 단순히 실행을 건너뛰게 됩니다).
TestNG의 다른 큰 관심 카드로는 테스트 파라미터, 데이터 프로바이더, 주석 변환기 등이 있습니다.즉, 활기차고 반응성이 뛰어난 사용자 커뮤니티입니다.
겉으로는 위의 모든 TestNG 기능이 필요하지 않다고 생각할 수 있지만, 테스트의 유연성을 이해하기 시작하면 JUnit에 어떻게 대처했는지 궁금할 것입니다.
(면책자 - JUnit 4.x는 전혀 사용하지 않았기 때문에, 거기서의 어드밴스나 신기능에 대해서는 코멘트를 할 수 없습니다).
1의테스트NG에는 '킬러 기능'이 없다는 것을 알게 되었습니다.좋기도 하고 JUnit 4에는 없는 기능도 있지만, 필요 없습니다.
우리는 사람들이 TestNG에 대해 알게 되는 동안 시험 쓰는 것을 불편해 하는 것을 원하지 않았다. 왜냐하면 우리는 그들이 계속해서 많은 시험을 쓰기를 원했기 때문이다.
JUnit Java를 소개합니다.이 기능을 지원하지 않는 툴은 없습니다.을 사용하다작년에 기능하고 있는 것을 나타내는 새로운 기능도 많이 추가되어 있습니다.
우리는 주니트를 따르기로 하고 뒤돌아보지 않았다.
위의 모든 분들께 건배!개인적으로 TestNG가 더 마음에 든 점은 다음과 같습니다.
@BeforeClassTestNG는 클래스 작성 후에 실행되므로 클래스 내에서 클래스의 정적 메서드만 호출할 수 있습니다.들여, 뿐입니다.하지만 셀레늄 테스트 한 세트를 작성하면서 드라이버 이름을 파라미터로 받아들인다는 건 정말 재미있어.그런 다음 IE, FF 및 Chrome 드라이버에 대해 각각 1개씩 3개의 병렬 테스트 그룹을 정의하고 레이스를 시청합니다.4장 지금까지 가 너무 4장, 4장, 4장, 4장, 4장, 4장을 망가뜨렸어요.
HtmlUnit이치노
그래, 아마 그 삶을 찾아야 할 거야;)
오늘 마주친 것을 공유하고 싶었어요.Junit4는 TestNG에 비해 Parameterized Runner가 매우 거칠다는 것을 알게 되었습니다(각 프레임워크에 강점이 있다는 것은 알고 있습니다만, 아직입니다).Junit4 주석 @parameters는 하나의 파라미터 세트로 제한됩니다.같은 테스트 클래스의 기능에 대해 유효 동작과 무효 동작을 테스트하는 중에 이 문제가 발생했습니다.따라서 최초로 발견된 정적 주석 방식이 사용되지만 임의의 순서로 검색될 수 있습니다.이로 인해 우리는 불필요하게 다른 수업을 쓰게 된다.그러나 TestNG는 각 방법마다 다른 종류의 데이터 공급자를 제공하는 깨끗한 방법을 제공합니다.따라서 동일한 테스트클래스에서 유효/비활성 데이터를 분리하여 유효/비활성화된 방식으로 동일한 코드 단위를 테스트할 수 있습니다.저는 TestNG로 하겠습니다.
또한 TestNG의 또 다른 장점은 병렬 테스트를 지원하는 것입니다.멀티코어 시대에는 중요하다고 생각합니다.
두 가지 프레임워크도 모두 사용했습니다.하지만 나는 주장할 때 햄크레스트를 사용한다.Hamcrest를 사용하면 자신만의 아사트 방법을 쉽게 작성할 수 있습니다.그래서 대신
assertEquals(operation.getStatus(), Operation.Status.Active);
쓸 수 있다
assertThat(operation, isActive());
이를 통해 테스트에서 더 높은 수준의 추상화를 사용할 수 있습니다.이렇게 하면 테스트가 더욱 견고해집니다.
JUnit 4 Vs TestNG – mkyong.com에 의한 비교(2013년 갱신).
결론:TestNG는 파라미터화 테스트, 의존성 테스트 및 스위트 테스트(그룹화 개념)에서 더 진보하기 때문에 Java 프로젝트의 핵심 유닛 테스트 프레임워크로 사용할 것을 제안합니다.
TestNG는 기능적인 고급 테스트 및 복잡한 통합 테스트를 의미합니다.이 유연성은 대규모 테스트 스위트에서 특히 유용합니다.
또한 TestNG는 JUnit4의 핵심 기능 전체를 커버합니다.더 이상 JUnit을 사용할 이유가 없습니다.
간단히 말해, TestNG = JUnit + 기타입니다.그럼 왜 토론합니까? 가서 TestNG를 잡으세요:-)
자세한 비교는 이쪽에서 보실 수 있습니다.
JUnit 대신 TestNG를 사용하는 이유는 무엇입니까?
의
@BeforeClass★★★★★★★★★★★★★★★★★」@AfterClass메서드는 JUnit에서 정적이어야 하지만 메서드 선언에서는 TestNG의 유연성이 더 높기 때문에 이러한 제약이 없습니다.TestNG에서는 2가지 방법으로 테스트를 파라미터화할 수 있습니다.@Parameter 또는 @DataProvider 주석.
i) @키 값 매핑이 필요한 단순한 경우 파라미터(데이터는 xml 파일로 제공)
ii) 복잡한 경우 @DataProvider.2차원 어레이를 사용하여 데이터를 제공할 수 있습니다.
TestNG에서는 @DataProvider 메서드가 스태틱할 필요가 없으므로 동일한 테스트클래스에서 여러 데이터 프로바이더 메서드를 사용할 수 있습니다.
의존성 테스트: TestNG에서는 초기 테스트가 실패했을 경우 이후의 의존성 테스트는 모두 건너뛰어 불합격으로 표시되지 않습니다.하지만 JUnit은 실패했다고 표시했다.
그룹화:단일 테스트는 여러 그룹에 속한 후 다른 컨텍스트에서 실행할 수 있습니다(느린 테스트 또는 빠른 테스트 등).JUnit 카테고리에 유사한 기능이 있지만 테스트를 초기화하거나 해체할 수 있는 @BeforeGroups/@AfterGroups TestNG 주석이 없습니다.
병렬 처리:여러 스레드에서 동일한 테스트를 병렬로 실행하는 경우 TestNG에서는 간단한 주석을 사용할 수 있지만 JUnit에서는 바로 사용할 수 있는 간단한 방법을 제공하지 않습니다.
TestNG @DataProvider는 데이터, CSV 또는 플레인텍스트 파일의 피드에도 XML을 지원할 수 있습니다.
TestNG를 사용하면 테스트 간의 종속성을 선언하고 종속성 테스트를 통과하지 못한 경우에는 건너뛸 수 있습니다.
@Test(dependsOnMethods = {dependOnSomething" })
이 기능은 JUnit에 없습니다.
- 리포트:
TestNG 보고서는 기본적으로 모든 테스트 데이터, 통과/실패/건너뛰기, 실행 시간, 사용된 입력 및 완전한 테스트 로그가 포함된 HTML 보고서가 포함된 테스트 출력 폴더에 생성됩니다.또한 모든 항목을 XML 파일로 내보내 자체 보고서 템플릿을 구성하는 데 사용할 수 있습니다.
JUnit에서는 이 모든 데이터를 XML을 통해 사용할 수 있지만 즉시 사용 가능한 보고서는 없으므로 플러그인에 의존해야 합니다.
리소스 링크:
이 튜토리얼에는 다음과 같은 좋은 차이가 있습니다.테스트NG와 JUnit: 차이점은 무엇입니까?
Mike Stone의 답변에 몇 가지 추가 사항:
1) TestNG 그룹을 가장 자주 사용하는 것은 테스트 스위트에서 단일 테스트 방법을 실행하고 싶은 경우입니다.그냥 "필" 그룹에 이 테스트를 추가하고 이 그룹을 운영하면 됩니다.JUnit 3을 사용할 때는 "suite" 방식으로 실행하고 싶은 방식을 제외한 모든 방식의 엔트리를 코멘트 아웃했지만 체크인 전에 코멘트 해제를 잊어버리는 경우가 많습니다.그룹에서는 더 이상 이런 문제가 없습니다.
2) 테스트의 복잡도에 따라서는 SED를 사용하여 테스트를 JUnit3에서 TestNG로 이행하고 모든 TestNG 아사트 메서드를 스태틱으로 Import하는 TestCase를 대체하는 베이스 클래스를 작성하는 것이 다소 자동으로 이루어집니다.
JUnit에서 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.
당신의 질문은 두 가지인 것 같아요.하나는 두 가지 테스트 프레임워크를 비교하고, 다른 하나는 테스트를 쉽게 구현하고, 자연스러운 주장을 가지고 싶은 것입니다.
네, 우선 JUnit은 기능면에서 TestNG를 따라잡고 있습니다.v4와의 차이는 어느 정도 좁혀져 있습니다만, 제 의견으로는 충분하지 않습니다.주석이나 데이터 프로바이더 등은 아직 TestNG에서 훨씬 우수합니다.또한 TestNG는 테스트 의존성, 그룹화 및 순서가 있기 때문에 테스트 실행 면에서 더 유연합니다.
JUnit에서는 여전히 특정 전/후 메서드를 정적으로 해야 합니다.이 때문에 테스트 실행 전에 수행할 수 있는 작업이 제한됩니다.TestNG에서는 이 문제가 발생하지 않습니다.
TBH, 통합/자동화 테스트에 초점을 맞추지 않는 한 두 프레임워크 간의 차이는 큰 의미가 없습니다.제 경험상 JUnit은 유닛 테스트용으로 처음부터 구축되어 현재는 보다 높은 레벨의 테스트로 이행되고 있습니다.IMO는 이를 업무에 적합하지 않은 툴로 되어 있습니다.TestNG는 유닛 테스트에서 우수한 성능을 발휘하며 강력한 데이터 전송과 뛰어난 테스트 실행 능력으로 인해 통합/자동 테스트 수준에서 더욱 잘 작동합니다.
이제 제가 생각하는 것은 어떻게 하면 체계적이고 읽기 쉬우며 유지보수가 가능한 테스트를 잘 작성할 수 있는가 하는 것입니다.이 대부분은 알고 계실 것입니다만, Factory Pattern, Command Pattern, PageObjects(테스트 웹사이트가 중요한 경우)등의 테스트(SUT)와 실제 테스트(비즈니스 로직의 어카운트) 사이에 추상 레이어를 가지는 것이 매우 중요합니다.더 좋은 주장을 하기 위해서는 햄크레스트를 사용하면 된다.javas 상속/인터페이스를 사용하여 반복을 줄이고 공통성을 적용합니다.
거의 잊어버렸습니다. 테스트 데이터 빌더 패턴도 사용합니다. 테스트 NG의 데이터 로바이더 주석과 함께 사용하면 매우 유용합니다.
언급URL : https://stackoverflow.com/questions/6658/junit-vs-testng
'programing' 카테고리의 다른 글
| Flask-SQ에서 raw SQL을 실행하는 방법LAlchemy 앱 (0) | 2023.01.14 |
|---|---|
| Galera 클러스터에서의 커밋 후의 노드 상태 (0) | 2023.01.04 |
| Kotlin에서 동시에 확장 및 구현 (0) | 2023.01.04 |
| MySQL에서 테이블 변수 만들기 (0) | 2023.01.04 |
| 이클립스 컴파일 오류:'클래스 이름' 형식의 계층이 일치하지 않습니다. (0) | 2023.01.04 |