spock interview questions with answers
이 Spock 인터뷰 질문 목록으로 Spock 인터뷰를 성공적으로 완료하십시오.
이것에 모두를위한 Spock 튜토리얼 , 우리는 Spock의 통합 및 기능 테스트 이전 튜토리얼에서.
이 튜토리얼은 Spock 프레임 워크에 대해 가장 자주 묻는 인터뷰 질문을 다룹니다.
우리는 또한 Spock을 Unit, Integration 및 end-to-end와 같은 많은 테스트 유형에 대해 정말 강력한 도구로 만드는 Spock 고정 방법 및 내장 된 확장 지원을 이해하려고 노력할 것입니다.
가장 인기있는 스팍 인터뷰 질문
다음은 가장 일반적으로 묻는 Spock 인터뷰 질문과 답변 및 예입니다.
탐험하자 !!
Q # 1) Spock 테스트는 when and then 블록을 여러 개 가질 수 있습니까?
대답: 단일 테스트에서 많은 작업을 시도하면 코드 냄새가 날 수 있으므로 일반적으로 소규모 테스트 나 시나리오를 사용하는 것이 좋습니다. 그렇긴하지만 테스트에서 여러 시간과 블록을 갖는 것은 완벽하게 타당합니다. 테스트는 모든 then 블록이 통과 상태 일 때만 성공한 것으로 간주됩니다.
YouTube를 wav 파일 무료로 변환
이를 설명하는 예를 살펴 보겠습니다.
def 'illustrate multiple when and then blocks'() { given: def input1 = 50 def input2 = 100 def result when: result = input1 + input2 then: result == 150 when: result = input2 - input1 then: result == 50 }
위의 코드 블록에서 2 개의 when 및 then 블록이 있음을 알 수 있습니다.
아래 사항에 유의하십시오.
- 블록은 나타나는 순서대로 즉 순차적으로 실행됩니다.
- 누구도 차단하지 않으면 테스트가 실패합니다.
- 전체 테스트가 성공하려면 모든 then 블록의 어설 션이 통과되어야합니다.
Q # 2) Spock에서 사용할 수있는 모든 고정 방법은 무엇입니까?
대답: Fixture 메서드는 특정 이벤트 후크가 트리거 될 때 호출되는 콜백과 같습니다.
Spock은 서로 다른 이벤트에 대해 트리거되는 4 개의 테스트 픽스처를 제공했습니다.
- setupSpec – 전체 사양 파일 실행이 시작되기 전에 한 번 실행됩니다.
- cleanupSpec – 지정된 Spec 파일의 모든 테스트가 실행될 때 한 번 실행됩니다.
- 설정 - 사양의 각 테스트 전에 한 번 실행합니다.
- 정리 – 사양의 각 테스트 후에 한 번씩 실행됩니다.
조명기 메서드를 설명하는 코드 샘플을 보겠습니다.
class TestFixtureSpec extends Specification { def setupSpec() { println 'in setup spec!' } def cleanupSpec() { println 'in cleanup spec!' } def setup() { println 'in setup!' } def cleanup() { println 'in cleanup!' } def 'test spec1'() { given: println '****test spec1****' } def 'test spec2'() { given: println '****test spec2****' }}
다음은 위 코드 샘플의 출력입니다.
설정 사양에서!
설정 중!
**** 테스트 사양 1 ****
정리 중!
설정 중!
**** 테스트 사양 2 ****
정리 중!
정리 사양!
위와 같이 설정 및 정리 사양은 전체 사양에 대해 한 번만 호출되고 설정 및 정리 단계 / 픽스처는 테스트 당 한 번 호출됨을 알 수 있습니다.
Q # 3) REST 기반 서비스를 테스트하는 데 Spock 테스트를 사용할 수 있습니까?
대답: 예, Spock 프레임 워크는 Rest 템플릿 등과 같은 공통 Java 라이브러리를 사용하여 배포 된 나머지 서비스에 대한 E2E 또는 통합 테스트를 생성하는 데 사용할 수 있습니다. 같은 다른 프레임 워크와 셀렌 ).
Spring의 RestTemplate 클래스를 사용하고 공개 호스팅 API에서 get 작업을 수행하고 응답이 null이 아닌지 확인하는 간단한 예제로이를 살펴 보겠습니다.
예:
class RestApiIntegrationSpec extends Specification { def 'check rest api status'() { when: 'a rest call is performed to the status page' RestTemplate restTemplate = new RestTemplate() String response = restTemplate.getForObject('https://httpbin.org/get', String.class) then: response != null } }
위의 예에서 공개 API의 응답을 주장하는 데 사용되는 Spock 사양을 참조 할 수 있습니다.
폭포 소프트웨어 개발 라이프 사이클 모델
Q # 4) Spock 프레임 워크의 한계는 무엇입니까?
대답: Spock 프레임 워크의 학습 곡선은 배우기 쉬운만큼 가파르지는 않지만 선언적 구문을 사용하면 가독성이 높습니다.
한편 고려할 수있는 몇 가지 사항이 있습니다.
- Java 코드베이스의 응용 프로그램의 경우 Spock을 사용하면 새로운 언어 스택 (예 : Groovy)이 추가됩니다.
- Spock 테스트는 기본 JUnit 테스트보다 약간 느리게 실행됩니다.
- Spock에 대한 IDE 지원은 JUnit과 같은 다른 프레임 워크만큼 좋지 않습니다.
위의 모든 요점에도 불구하고 Spock 프레임 워크의 장점은 Spock의 작은 단점 목록보다 큽니다.
Q # 5) Spock 프레임 워크의 기본 제공 확장에 대해 설명하십시오.
대답: Spock은 대부분 주석 기반 인 많은 내장 확장 / 후크 / 트리거를 제공합니다 (테스트 픽스처 섹션 / 질문에서 몇 가지를 보았습니다).
예제에 대한 몇 가지 기본 논의를 살펴 보겠습니다.
@ 무시 : 기능 (또는 개별 메서드)이 실행되는 것을 방지합니다. 단순히 decorate 메서드 (개별 테스트 메서드) 또는 전체 사양을 사용하려면 주석이 달린 메서드 또는 클래스가 실행되지 않도록해야합니다.
@Ignore def 'check case-insensitive equality of 2 strings'() { given: 'two input strings' String str1 = 'hello' String str2 = 'HELLO world' when: 'strings are lowercased' str1 = str1.toLowerCase() str2 = str2.toLowerCase() then: 'equal strings should return success' str1 == str2 }
@IgnoreRest : 이 주석은 하나를 선택하고 주어진 사양의 나머지 메서드를 실행하려는 경우에 유용합니다.
@IgnoreRest def 'check case-insensitive equality of 2 strings'() { given: 'two input strings' String str1 = 'hello' String str2 = 'HELLO world' when: 'strings are lowercased' str1 = str1.toLowerCase() str2 = str2.toLowerCase() then: 'equal strings should return success' str1 == str2 } def 'check addition of 2 numbers'() { given: int input1 = 10 int input2 = 25 expect: input1.getClass().toString() == 'class java.lang.Integer' input2.getClass().toString() == 'class java.lang.Integer' input1 = Integer.MIN_VALUE when: int result = input1 + input2 then: result == 35 }
위의 예에서 볼 수 있듯이 @IgnoreRest로 주석이 달린 메소드가 실행되고 나머지 테스트는 무시됩니다.
@IgnoreIf : 이 주석은 조건부 무시입니다.
예를 들면 : Mac OS에서 일부 테스트를 실행하지 않으려면 @IgnoreIf와 System.getProperty ( 'os.name')의 조합을 사용하여 일치하는 OS가 발견 된 경우에만 테스트가 실행되도록 할 수 있습니다. .
아래 코드 샘플을 통해이를 이해해 보겠습니다.
@IgnoreIf({ System.getProperty('os.name').contains('Mac') }) def 'check case-insensitive equality of 2 strings'() { given: 'two input strings' String str1 = 'hello world' String str2 = 'HELLO world' when: 'strings are lowercased' str1 = str1.toLowerCase() str2 = str2.toLowerCase() then: 'equal strings should return success' str1 == str2 }
위 코드 샘플에서는 속성 값에서 'Mac'을 확인하고 조건 일치가 성공한 경우에만 무시하는 System.getProperty의 조건과 함께 @IgnoreIf 주석을 사용했습니다.
여기에서 확장 프로그램을 하나 더 보겠습니다. @Timeout : 이렇게하면 실행중인 테스트에 대해 선택한 단위로 제한 시간 값을 언급하는 데 도움이되며 제한 시간 임계 값을 위반하면 테스트에서 예외가 발생합니다.
여기서 주목해야 할 또 다른 중요한 점은 @Timeout 주석이 전체 사양에 대해서도 언급 될 수 있으며 이는 모든 개별 테스트의 기간을 결합하고 임계 값 위반시 예외를 발생 시킨다는 것입니다.
@Timeout(value=10, unit= TimeUnit.MILLISECONDS) class SampleSpec extends Specification { def 'check case-insensitive equality of 2 strings'() { //test1 } def 'check addition of 2 numbers'() { //test2 } }
위 코드에서 spec의 총 실행 시간이 10ms를 초과하면 시나리오 실행이 실패합니다. 오류 콘솔에서 오류 세부 정보와 함께 출력을 볼 수 있습니다.
위에서 언급 한 확장과 유사하게 다음과 같은 몇 가지 다른 기본 제공 확장이 있습니다.
@Requires : 특정 조건이 참이어야합니다.
@발행물: 테스트 케이스 등과 관련된 모든 결함을 연결합니다.
4 년 경력의 qtp 인터뷰 질문 및 답변
이러한 확장은 Spock 사양에 많은 유연성과 성능을 추가하고 테스트 실행을위한 많은 제어를 제공합니다.
결론
따라서이 튜토리얼에서 가장 인기있는 Spock 인터뷰 질문을 다루었습니다. Spock에 대한 학습 곡선은 언어 그루비가 선언적 프로그래밍 스타일을 따르고 가독성이 높기 때문에 낮습니다.
비교적 새롭지 만 Spock은 다양한 종류의 테스트를 작성하기위한 프레임 워크로 인기를 얻고 있습니다. 자바 또는 Groovy 기반 애플리케이션.
이 Spock 시리즈의 모든 유익한 튜토리얼을 즐겼기를 바랍니다. 우리는이 튜토리얼이 Spock에 대한 지식과 이해를 풍부하게했을 것이라고 확신합니다.