data driven parameterized testing with spock framework
Spock 프레임 워크를 사용하여 데이터 기반 또는 매개 변수화 된 테스트를 작성하는 방법을 살펴보십시오.
이것에 무료 Spock 교육 튜토리얼 시리즈 , 우리는 Spock의 단위 테스트 이전 튜토리얼의 테스트 픽스처, 어설 션 및보고.
이 튜토리얼에서는 매개 변수화 된 테스트가 무엇인지, 그리고 데이터 기반 테스트를 달성하기 위해 Spock의 내장 기능을 어떻게 활용할 수 있는지 이해하려고 노력할 것입니다.
시작하자!!
비디오 튜토리얼보기
학습 내용 :
매개 변수화 된 테스트 란 무엇입니까?
자동화 / 단위 테스트로 작업 한 사람에게 데이터 기반 테스트는 새로운 용어가 아닙니다.
매개 변수화 된 테스트는 아무것도 아니지만 동일한 실행 로직을 공유하고 경우에 따라 입력 데이터와 결과 만 다른 모든 종류의 테스트입니다.
예: 기능을 완전히 테스트하기 위해 다른 입력 세트에 대해 테스트를 실행할 수있는 계산기 애플리케이션이 있다고 가정합니다.
예: 음수, 분수, 일반 정수, 최대 허용 범위에 근접한 정수 등. 입력 값이 무엇이든 동일한 실행 로직을 실행하려고합니다.
매개 변수화 된 테스트를 작성하는 또 다른 좋은 이유는 행복한 경로를 테스트하는 것이 아니라 오류 경로 또는 부정적인 시나리오도 테스트한다는 것입니다.
예: 주어진 파일 확장자가 유효한지 여부를 리턴하는 애플리케이션이 있다고 가정하십시오. 데이터 기반 테스트를 통해 개발자는 지원되는 파일 확장자 및 모든 오류 시나리오 또는 부정적인 입력 테스트에 대한 테스트를 빠르게 실행할 수 있습니다.
이제 전통적으로 여러 입력 값에 대한 테스트를 작성하거나 복사하는 것을 생각할 수 있지만 이는 이러한 종류의 테스트 실행을 달성하는 정확하거나 현명한 방법이 아닙니다. 또한 앱에서 테스트 수가 증가하기 시작하면 이러한 테스트를 유지하기가 어려워집니다.
Spock으로 매개 변수화 된 테스트 작성
Where : 블록
Spock 테스트의 where 블록은 매개 변수화 된 테스트를위한 데이터를 보유하는 블록입니다. 선택적으로 입력 및 예상 출력 값을 모두 포함 할 수 있습니다. 이 블록에 대해 주목해야 할 중요한 점은 이것이 Spock 테스트에서 마지막 블록이어야한다는 것입니다.
그렇긴하지만, 주어진 시간 & 그때와 같은 다른 모든 블록과 결합 될 수 있지만 마지막 블록이어야합니다.
더 잘 이해하기 위해 예제를 살펴 보겠습니다.
2 개의 입력 매개 변수를 사용하고 제공된 입력의 합계를 반환하는 계산기 응용 프로그램을 사용합니다. 여러 입력과 expectedOutput 값을 제공하는 매개 변수화 된 테스트를 작성합니다.
def 'sample parameterized test'() input2
위의 코드 샘플에서 다음을 볼 수 있습니다.
- 실행할 테스트 데이터가 포함 된 'where'블록입니다.
- 'where'블록은 테스트의 마지막 블록입니다.
- '어디'는 다른 블록과 결합됩니다.
- 데이터 표현은이 튜토리얼의 다음 섹션에서 자세히 살펴볼 데이터 테이블이라는 특수 형식입니다.
- 데이터의 헤더 행은 기본적으로 테스트에서 직접 사용할 수있는 속성 / 입력 변수입니다. 예 : 우리가 직접 사용한 '언제'블록의 문장을 참조하십시오. 입력 1 과 입력 2 명시 적으로 정의하지 않고 입력 매개 변수로.
데이터 테이블 사용
이제 데이터 테이블을 자세히 이해해 보겠습니다. 데이터 테이블의 각 줄은 개별 시나리오 (테스트 실행)에 대한 데이터를 나타냅니다.
관례 상 입력 값 앞에는 단일 파이프 (‘|’)가오고 출력 값 앞에는 이중 파이프 (‘||’)가옵니다. 이것은 논리적으로 의미가 없지만 관습이며 가독성을 향상시킵니다. 따라서 아래의 두 예는 모두 사실입니다.
input1 |input2 |expectedResult 10 |15 |25 -4 |6 |2 input1 |input2 || expectedResult 10 |15 || 25 -4 |6 || 2
위에 표시된대로 헤더 행에는 테스트 할 데이터로 제공된 각 매개 변수의 이름이 있습니다. 이 매개 변수 이름이 테스트의 기존 로컬 / 글로벌 변수와 충돌해서는 안된다는 점에 유의해야합니다. 컴파일 타임 오류 변수 이름을 해결합니다.
데이터 테이블을 사용하는 동안 유의해야 할 중요한 점은 최소 2 개의 열이 필요하다는 것입니다. 하나의 열만 필요한 경우 밑줄 문자로 값이있는 빈 열은 아래와 같은 해결 방법입니다.
input1 ||_ 10 ||_ -4 ||_
이 형식의 장점은 단순성, 가독성 및 확장 성입니다. 새 데이터 입력을 추가하는 것은 데이터 값이있는 새 행을 추가하는 것만 큼 간단합니다.
여기서 주목해야 할 또 다른 점은 데이터 테이블을 사용하여 모든 유형의 변수, 클래스, 객체, 열거 형 등을 보관하는 데 사용할 수 있으므로 더욱 강력합니다. groovy는 선택적으로 유형이 지정되는 언어이므로 명시 적 유형이 지정되지 않은 경우 데이터 테이블의 변수는 제공된 데이터 유형에 따라 달라집니다.
또 보자 예 문자열 목록이있는 데이터 테이블을 문자열의 요소 개수로 입력 및 출력으로 사용합니다.
def 'sample parameterized test with list data type'() when: def actualCount = input1.size() then: actualCount == expectedCount where: input1
위의 예에서 입력이 문자열의 배열 목록으로 제공되었으며 출력이이 배열 목록의 크기임을 알 수 있습니다. 따라서 다양한 유형의 입력 데이터를 가질 수있는 많은 유연성을 제공합니다.
각 입력 유형의 데이터를 반환하고 데이터 테이블에서도 직접 사용하는 표현식을 간단히 언급 할 수도 있습니다.
'where'블록의 수명주기
데이터 테이블 형식의 where 블록 및 데이터 샘플을 포함하는 테스트의 경우 각 데이터 행은 테스트 메서드의 한 번 실행을 나타냅니다.
예를 들어 5 행의 데이터가 있고 테스트에 '주어진'및 '언제'블록이 포함 된 경우 이러한 데이터 행에 대해 테스트 블록이 한 번 실행됩니다. 따라서 전체적으로 테스트 메서드는 총 5 번 실행됩니다.
팁 & 트릭
이러한 데이터 테이블로 작업하는 동안 매개 변수화 된 테스트에 대한 몇 가지 팁과 요령을 살펴 보겠습니다.
# 1) 개별 행 실행 결과를 개별적으로 표시합니다. 라이프 사이클 섹션에서 보았 듯이 데이터의 각 행에 대해 테스트 코드가 한 번 실행됩니다. 이러한 행 또는 결과를 각 행에 대해 개별적으로 표시하려면 '@Unroll'주석을 이러한 테스트에 사용할 수 있습니다.
예를 들어 이해해 보겠습니다.
테스트중인 메서드에 제공되는 3 세트의 입력 데이터와 함께 동일한 계산기 응용 프로그램을 사용합니다.
Windows 오류 복구 도구 Windows 10
def 'sample parameterized test'() -20
'@Unroll'주석이없는 경우 결과가 터미널에서 어떻게 보이는지 살펴 보겠습니다 (HTML 기반 보고서 포함). 이러한 종류의 출력을 사용하면 테스트에 실패한 입력 집합을 파악하기가 어려워집니다.
이제 테스트 메서드 (데이터 입력으로 데이터 테이블이있는)에 '@Unroll'주석을 추가 한 후 각 행에 대해 테스트 출력이 개별적으로보고되는 방식을 살펴 보겠습니다.
#두) 이제 이러한 데이터 기반 테스트에 의미있는 정보를 추가하는 방법을 이해하겠습니다 (위의 스크린 샷에서와 같이 일부 자동 추가 인덱스 대신).
데이터 테이블에 따라 입력 및 출력 속성에 자리 표시자를 사용할 수 있으며 데이터 테이블의 데이터로 테스트 이름에 채워진 값을 볼 수 있습니다.
동일한 예제를 사용하고 데이터 테이블에 언급 된대로 입력 및 예상 출력에서 데이터를 가져 오기 위해 테스트 이름을 업데이트 해 보겠습니다.
@Unroll def 'result of adding #input1 & #input2 should be #expectedResult'() given: def app = new CalculatorApp() when: def resultSum = app.add(input1, input1) then: resultSum == 2 * input1 where: input1
이제 터미널과 HTML 기반 보고서에서 출력이 어떻게 보이는지 살펴 보겠습니다.
따라서 여기에서 볼 수 있듯이 입력 및 출력의 데이터가 실행될 때 테스트 이름과 함께 표시됩니다. 이렇게하면 테스트 실패 또는 오작동의 원인이 된 입력을 명확하게 나타내므로 문제 해결 및 디버깅이 훨씬 쉬워집니다.
결론
이 튜토리얼에서는 Spock 프레임 워크를 사용하여 매개 변수화 된 테스트를 작성하는 방법을 배웠습니다. 또한 데이터 테이블의 다양한 기능과 사용 방법에 대해서도 논의했습니다.
Spock과 함께 Mocks 및 Stubs를 사용하는 방법을 알아 보려면 다음 자습서를 확인하십시오!