junit test suite filtering test cases
이 튜토리얼에서는 JUnit 테스트 스위트가 무엇인지, 테스트 스위트를 만드는 방법 및 JUnit 4와 JUnit 5에서 테스트 케이스를 필터링하는 방법에 대해 설명합니다.
이전 튜토리얼에서 실행 중에 특정 테스트 케이스를 건너 뛰는 방법에 대해 배웠습니다. 또한이를 위해 JUnit 4와 JUnit 5에서 사용되는 다양한 주석에 대해 배웠습니다.
이 자습서에서는 다음을 학습합니다.
- 테스트 스위트 란 무엇입니까?
- 여러 테스트 케이스를 그룹으로 묶고 JUnitCore 클래스를 사용하여 스위트를 실행하여 테스트 스위트를 어떻게 생성합니까?
=> 독점 JUnit 교육 자습서 시리즈를 보려면 여기를 방문하십시오.
학습 내용 :
JUnit 테스트 스위트
JUnit 4 : @RunWith, @SuiteClasses 주석
튜토리얼 JUnit 테스트를 실행하는 여러 방법 테스트 스위트를 만드는 방법을 설명했습니다. JUnit 4.
주석 @RunWith 과 안녕하세요. 여러 JUnit 테스트 클래스를 그룹화하여 테스트 스위트를 만드는 데 도움이되었습니다. 그 후, JUnitCore.runclasses () 클래스가있는 러너 파일이 생성 된 테스트 스위트의 실행을 호출했습니다.
워크 플로에 대한 모든 세부 사항과 실제 코드는 언급 된 섹션을 참조하십시오. JUnit 4.
JUnit 5 : @RunWith, @SelectClasses, @SelectPackages 주석
에서 테스트 스위트 생성 JUnit 5 JUnit 4에있는 것과 매우 유사합니다. 그렇다면 차이점은 무엇입니까?
#1) 에 JUnit 4 , 테스트 스위트 생성을 지원하기 위해 @RunWith 주석에 매개 변수로 전달되는 Suite.class가 있습니다. JUnit 5 동일한 @RunWith 주석을 사용하지만 입력 매개 변수는 다음과 같습니다. JUnitPlatform.class 대신에 Suite.class .
따라서 JUnit 5의 코드 줄은 다음과 같습니다. @RunWith (JUnitPlatform.class). 이것은 서브 프로젝트 JUnit 플랫폼과 함께 패키지로 제공되는 주석입니다.
#두) 에 JUnit 4 , 우리는 사용 안녕하세요. 쉼표로 구분 된 여러 JUnit 클래스를 그룹화하려면 JUnit 5 우리는 :
- 주석 @SelectClasses 그것은 안녕하세요. JUnit 4에서 여러 JUnit 클래스를 그룹화합니다.
- 안녕하세요. 주석은 패키지에서 여러 테스트를 그룹화하는 데 사용됩니다. 포함 할 패키지를 나타내는 문자열 배열 값을 입력해야합니다.
즉,
- 단일 패키지에서 테스트 케이스를 그룹화하려는 경우 JUnit 5를 사용하여이를 수행 할 수 있습니다.
- 또는 여러 패키지에서 테스트 케이스를 그룹화하려는 경우 JUnit 5도 지원합니다. 여기서 기억해야 할 사항은 언급 된 패키지의 모든 하위 패키지 아래에있는 테스트도 기본적으로 테스트 스위트에 포함된다는 것입니다.
JUnit 5 : 다양한 시나리오 / 예제
여러 테스트 클래스를 그룹화하는 테스트 스위트 만들기
코드 스 니펫은 다음과 같습니다.
@RunWith(JUnitPlatform.class) @SelectClasses({JUnit5TestCase1.class, JUnit5TestCase2.class }) public class JUnitTestSuite { }
단일 패키지 용 테스트 스위트 생성
코드 스 니펫은 다음과 같습니다.
@RunWith(JUnitPlatform.class) @SelectPackages({“ demo.tests “}) public class JUnit5TestSuite { }
노트 :
- 말하다 demo.tests 패키지에 하위 패키지가 있습니다. demo.tests.subtests.
- 코드 @SelectPackages ({“demo.tests“}) 하위 패키지 아래의 모든 테스트도 테스트 스위트에 포함됩니다. 기본적으로.
- 당신이 진술했다면 @SelectPackages ({“demo.tests.subtests“}) , 하위 패키지 아래의 테스트 케이스 demo.tests.subtests 테스트 스위트에만 포함되는 반면 부모 패키지의 테스트는 demo.tests 포함되지 않습니다.
여러 패키지에 대한 테스트 스위트 생성
테스트 스위트를 만들기위한 코드 스 니펫 여러 패키지 JUnit 5에서 쉼표로 구분 – 다음과 같이 표시됩니다.
@RunWith(JUnitPlatform.class) @SelectPackages({“demo.tests”, “demo1.tests”, “demo2.tests”}) public class JUnit5TestSuite { }
필터링 테스트 스위트 – JUnit 4 대 JUnit 5
때로는 테스트 케이스를 필터링하고 필요에 따라 특정 테스트 세트를 실행해야합니다. 예를 들어 회귀 테스트 용으로 식별 된 테스트 세트, 단위 테스트 용 별도 세트, 연기 테스트 용 별도 테스트 케이스 세트가있을 수 있습니다.
특정 패키지, 클래스 또는 카테고리에서 테스트 케이스를 제외하거나 포함해야합니다. 단일 패키지에서 테스트를 필터링하거나 태그를 지정하는 것은 JUnit4의 유일한 옵션입니다.
JUnit 4와 비교하여 JUnit 5는 변화하는 요구 사항에 따라 단일 패키지 또는 여러 패키지 및 하위 패키지에서 테스트 케이스를 필터링해야하는 이러한 요구를 지원하는 좋은 기능 세트를 제공합니다.
JUnit 4 – @Category, @IncludeCategory, @ExcludeCategory
JUnit 4의 테스트 케이스는 다양한 카테고리로 분류 할 수 있습니다. 이러한 범주는 테스트 스위트를 실행하는 동안 제외되거나 포함될 수 있습니다. 주석 @Category, @IncludeCategory 및 @ExcludeCategory JUnit 4.12 이상에서 지원됩니다.
범주 또는 범주를 기반으로 필터를 만드는 개략적 인 단계는 다음과 같습니다.
#1) 카테고리에서 역할을하는 마커 인터페이스를 생성합니다.
#두) SuiteClass에 포함될 클래스의 테스트 메서드에 주석을 추가합니다. @범주 및 카테고리 이름.
#삼) 테스트 스위트 파일에서 주석을 사용하십시오. @IncludeCategory 특정 카테고리에 속하는 테스트를 포함하려면 카테고리 이름으로.
# 4) 테스트 스위트 파일에서 주석을 사용하십시오. @ExcludeCategory 그들을 제외하기위한 카테고리 이름과 함께.
# 5) @Category 주석은 테스트 수준 또는 클래스 수준에서도 사용할 수 있습니다. 주석이 테스트 수준에서 적용되면 해당 특정 테스트는 지정된 범주로 태그가 지정되고 주석이 클래스 수준에 있으면 클래스 내의 모든 테스트가 지정된 범주로 태그됩니다.
테스트를 분류하고 실행을 위해 필터링하는 실제 구현을 이해하기 위해 몇 가지 세부 정보를 살펴 보겠습니다.
1 단계:
우리는 마커 인터페이스 그 역할을 할 테스트 방법 카테고리. 여기서는 UnitTest . 코드는 매우 간단합니다. 아래 코드를 참조하십시오.
UnitTest.java 용 코드
package demo.tests; public interface UnitTest {}
2 단계:
우리는 카테고리를 테스트 방법 수준 수업에서 JUnitTestCase1.java . 테스트 케이스 junitMethod1 ()을 UnitTest 카테고리에 추가하려면 테스트 메소드에 다음과 같이 주석을 달아야합니다. @Category (UnitTest.class) .
이렇게하면 UnitTest 범주에 테스트 방법이 추가됩니다. 다른 테스트 방법 (있는 경우)은 방법에 범주가 주석으로 추가되지 않는 한 범주에 태그가 지정되지 않습니다.
@Category 주석이 코드에서 작동하도록하려면 패키지를 가져와야합니다. org.junit.experimental.categories.Category
JUnitTestCase1.java의 코드 스 니펫 :
@Category(UnitTest.class) @Test public void junitMethod1(){ int Value2=9000; Assert. assertEquals (Value1, Value2); }
또는 테스트 방법이 여러 범주에 속할 수도 있습니다. 예 : : @Category (UnitTest.class, SmokeTest.class)
3 단계 :
이제 카테고리를 표시하겠습니다. 수업 수준에서 수업에서 JUnitTestCase2.java . 이전 단계에서 테스트 메서드 수준에서 추가 한 것과 동일한 문이 현재 클래스 파일에도 추가됩니다.
여기서는 클래스 수준에서 문을 추가합니다. 이렇게하면 파일의 모든 테스트 방법이 UnitTest 범주.
JUnitTestCase2.java의 코드 스 니펫 :
@Category(UnitTest.class) @Test public class JUnitTestCase2 { public String stringValue='JUnit';
4 단계 :
소프트웨어 테스트의 자동화 모범 사례
이제 필수 테스트 케이스가 UnitTest 카테고리로 분류되었으므로 카테고리를 기준으로 필터링하여 테스트 스위트에 추가하는 방법을 살펴 보겠습니다. 우리는 JUnitTestSuite.class 이것을 증명하기 위해.
- Categories.class @RunWith 주석에 매개 변수로 전달됩니다.
- @ Suite.SuiteClasses는 테스트 클래스 문자열 배열을 사용합니다.
- 주석 @ Categories.IncludeCategory 매개 변수로 UnitTest.class가 필요합니다.
- 이 문은 전체 스위트를 필터링하고 카테고리에 속하는 스위트에서 해당 테스트 케이스 만 실행하는 데 도움이됩니다.
- Categories.class에는 패키지가 필요합니다. org.junit.experimental.categories.Categories 가져올 수 있습니다.
JunitTestSuite.java의 코드 스 니펫
@RunWith(Categories.class) @Categories.IncludeCategory(UnitTest.class) @Suite.SuiteClasses({JUnitTestCase1.class, JUnitTestCase2.class}) public class JUnitTestSuite {
주석 @ Categories.IncludeCategory 다음과 같이 쓸 수도 있습니다. @IncludeCategory. 여러 인터페이스 (범주)를 만들고 쉼표로 구분 된 여러 범주로 클래스 / 테스트 메서드에 주석을 달 수도 있습니다. 아래 예는 카테고리 – Category1 및 Category2에 속하는 테스트를 필터링합니다.
예: @IncludeCategory ({Category1.class, Category2.class})
유사한 규칙이 적용됩니다. @ Categories.ExcludeCategory / @ExcludeCategory 테스트 실행 중에 카테고리 또는 카테고리 아래에서 테스트 방법을 제외합니다.
JUnit 5 – @IncludeTags, @ExcludeTags, @IncludePackages, @ExcludePackages, @IncludeClassNamePatterns, @ExcludeClassNamePatterns
JUnit 5에는 테스트 케이스를 구성하고 필터링하기위한 여러 접근 방식이 포함되어 있습니다.
JUnit 5 – @IncludeTags, @ExcludeTags
#1) JUnit 4와 마찬가지로 @IncludeCategory 및 @ExcludeCategory 주석은 실행을위한 필터링 테스트 케이스를 지원합니다.
#두) JUnit 5에는 동일한 목적을 달성하기 위해 @IncludeTags 및 @ExcludeTags 주석이 있습니다.
#삼) JUnit 4는 특정 카테고리로 구성되는 테스트 케이스를 참조하고 JUnit 5는 실행을 위해 테스트 케이스를 필터링 할 수 있도록 특정 태그로 테스트 케이스에 태그를 지정하는 것을 말합니다.
태그를 기반으로 필터를 만드는 고급 단계는 다음과 같습니다.
- @SelectPackages에 포함될 패키지의 테스트 메서드에 주석을 추가합니다. @꼬리표 및 사용자 정의 태그 이름. 한 클래스는 다른 테스트 방법에 대해 다른 태그를 가질 수 있습니다.
- 클래스의 모든 테스트에 태그가 지정되도록 클래스 수준에서 @Tag에 주석을 달 수도 있습니다.
- 테스트 스위트 파일에서 주석을 사용하십시오. @IncludeTags 태그 이름과 함께 특정 태그에 속하는 테스트를 포함합니다.
- 테스트 스위트 파일에서 주석을 사용하십시오. @ExcludeTags 테스트 스위트에서 제외하기위한 태그 이름으로.
이제 JUnit 5에서 실제로 필터링을 구현하는 방법에 대한 자세한 그림을 살펴 보겠습니다.
1 단계 : JUnit5TestCase1.java의 테스트 메소드에 'Regression'이라는 태그 이름을 지정합니다.
JUnit5TestCase1.java의 코드 스 니펫 :
@Tag(“Regression”) @Test public void junitMethod1(){
2 단계 : JUnit5TestCase2.java의 테스트 메소드에 'SmokeTest'라는 태그 이름을 지정합니다.
JUnit5TestCase2.java의 코드 스 니펫 :
@Tag(“SmokeTest”) @Test public void junitMethod2(){
3 단계 : 테스트 메소드에 태그가 지정되었으므로 이제 JUnit5TestSuite.java를 업데이트하여 테스트를위한 태그별로 적절한 필터를 추가합니다. 아래 코드는 'Regression'으로 태그가 지정된 모든 테스트를 포함하고 'SmokeTest'로 태그가 지정된 모든 테스트를 제외합니다.
JUnit5TestSuite.java의 코드 스 니펫 :
@RunWith(JUnitPlatform.class) @SelectPackages({“demo.tests“}) @IncludeTags(“Regression”) @ExcludeTags(“SmokeTest”) public class JUnit5TestSuite { }
JUnit 5 – @IncludePackages, @ExcludePackages
우리는 이미 패키지 이름을 안녕하세요. 주석을 달면 패키지의 하위 패키지에있는 테스트도 테스트 스위트에 추가됩니다.
테스트 스위트에 포함시키려는 특정 하위 패키지가있을 수 있고, 스위트에 포함되기를 원하지 않거나 관련이없는 다른 하위 패키지가있을 수 있습니다.
이것은 주석을 통해 촉진됩니다. @IncludePackages 및 @ExcludePackages JUnit 5.
아래의 각 패키지에 테스트 클래스가있는 subpackage1, subpackage2, subpackage 3과 같은 세 개의 하위 패키지가있는 패키지 'demo.tests'가 있다고 가정 해 보겠습니다.
패키지를 포함하고 제외하는 방법을 시각화하기 위해 JUnit5TestSuite.java의 코드 스 니펫을 살펴 보겠습니다.
시나리오 # 1 : subpackage1의 테스트 케이스 만 포함하도록 필터를 적용하십시오.
아래 코드는 demo.tests.subpackage1 패키지에있는 모든 JUnit 클래스의 모든 테스트를 포함하지만, 패키지 demo.test 바로 아래에있는 모든 테스트와 패키지 subpackage2 및 subpackage3 아래에있는 테스트를 제외합니다.
JUnit5TestSuite.java의 코드 스 니펫 :
@RunWith(JUnitPlatform.class) @SelectPackages({“demo.tests“}) @IncludePackages(“demo.tests.subpackage1”) public class JUnit5TestSuite { }
시나리오 # 2 : 패키지 subpackage3에서만 테스트 케이스를 제외하려면 필터를 적용하십시오.
아래 코드는 패키지 (demo.tests.subpackage3)의 JUnit 클래스에서 모든 테스트를 제외하지만 패키지에는 demo.test 패키지 바로 아래에있는 모든 테스트와 subpackage1 및 subpackage2 패키지 아래에있는 테스트가 포함됩니다.
JUnit5TestSuite.java의 코드 스 니펫 :
@RunWith(JUnitPlatform.class) @SelectPackages({“demo.tests“}) @ExcludePackages(“demo.tests.subpackage3”) public class JUnit5TestSuite { }
JUnit 5 – @IncludeClassNamePatterns, @ExcludeClassNamePatterns
패키지에서 특정 정규식과 일치하는 특정 클래스를 포함하거나 제외하려는 경우 주석은 @ IncludeClassNamePatterns 과 @ ExcludeClassnamePatterns 테스트 스위트 클래스 파일에서 사용할 수 있습니다.
이제 코드 업데이트를 통해 그림을 보겠습니다. JUnit5TestSuite.java
시나리오 # 1 :
아래 코드에는 패키지 demo.tests에서‘Ctests’로 끝나는 클래스가 포함되어 있습니다.
@RunWith(JUnitPlatform.class) @SelectPackages({“demo.tests“}) @IncludeClassNamePatterns({'^.*CTests?$'})
시나리오 # 2 :
이제 우리는 시작하다 패키지 demo.tests의 'STest'로
@RunWith(JUnitPlatform.class) @SelectPackages({“demo.tests“}) @ExcludeClassNamePatterns({'^STest.*$'})
시나리오 # 3 :
여러 정규식을 필터 기준으로 전달할 수도 있습니다. 아래 코드는‘ 또는 ' 운영자. 슬릿 바 | 여기서 OR 연산자입니다.
DVD를 PC로 추출하는 소프트웨어
코드는 클래스를 필터링합니다. 시작 와 테스트 ( 테스트.*) 또는 종결 와 테스트 (*. 테스트?) @IncludeClassNamePatterns 주석이 사용되므로 테스트 스위트에 해당 클래스를 포함합니다.
노트 : 정규화 된 클래스 이름이 하나 이상의 패턴과 일치하면 클래스는 @IncludeClassNamePatterns 또는 @ExcludeClassNamePatterns 주석에 따라 가져옵니다.
@RunWith (JUnitPlatform.class)
@SelectPackages ({“demo.tests“})
@IncludeClassNamePatterns (. * Tests?) $”)
JUnit 필터링 테스트 케이스에 대한 FAQ
여기에 꽤 오랫동안 머릿속에 남아있을 수있는 질문이 있습니다.
Q # 1) 테스트 비활성화 / 무시와 테스트 필터링의 차이점은 무엇입니까? 두 기능 모두 실행 중에 테스트 사례를 건너 뛰는 동일한 목적을 수행하는 데 도움이되지 않습니까?
답변 :이 질문은 실제로 진짜이며 대답 할 가치가 있습니다.
- 필터링 제외 테스트 기능을 사용하면 포함 태그 된 카테고리에 따라 테스트합니다. 반면 비활성화하면 실행 테스트를 제외하고 제외하는 것만 결정할 수 있습니다.
- 테스트 케이스를 필터링하는 것은 일종의 조건부로 테스트 케이스를 건너 뛰는 반면, 무시 된 테스트의 경우 조건없이 건너 뜁니다.
- 둘 사이의 또 다른 중요한 차이점은 @Ignore 또는 @Disabled 주석이 달린 테스트를 사용하여 테스트 케이스를 실행할 때 무시 된 테스트가 아래의 테스트 결과에 표시된다는 것입니다. 건너 뛰기 카운트
- 필터링 된 테스트를 실행하면 테스트 결과에 전혀 표시되지 않습니다.
결론
이 자습서에서는 테스트에 카테고리 / 태그를 추가하여 테스트를 필터링하는 방법을 배웠습니다.
우리는 JUnit 4에서 테스트 케이스를 필터링하기위한 @Category, @IncludeCategory 및 @ExcludeCategory가 있고 JUnit 5에는 @IncludeTags 및 @ExcludeTags가 있다는 것을 배웠습니다.
게다가 JUnit 5에는 @IncludePackages, @ExcludePackages 주석을 사용하는 추가 필터링 옵션이 있으며 클래스 이름 패턴을 사용하여 클래스를 포함하거나 제외하는 주석도 있습니다. 우리가 더 많이 탐구하고 있습니다. 우리는 아직 탐구 할 것이 훨씬 더 많다는 것을 알고 있습니다.
=> 여기에서 간단한 JUnit 교육 시리즈를 확인하십시오.
추천 도서
- JUnit 무시 테스트 사례 : JUnit 4 @Ignore Vs JUnit 5 @Disabled
- JUnit 테스트 : 예제로 JUnit 테스트 케이스를 작성하는 방법
- JUnit 주석 목록 : JUnit 4 대 JUnit 5
- 초보자를위한 JUnit 튜토리얼-JUnit 테스팅이란?
- JUnit 테스트 픽스처 란 무엇인가 : JUnit 4 예제를 사용한 튜토리얼
- JUnit 테스트를 실행하는 여러 방법
- Eclipse에서 JUnit 다운로드, 설치 및 구성
- JUnit 프레임 워크 소개 및 Selenium 스크립트에서의 사용법 – Selenium Tutorial # 11