spock integration
통합 테스트 (예 : Rest Services) 및 기능 테스트 (Selenium 사용)를위한 Spock :
우리는 Spock에서 조롱, 스터 빙 및 감시 이전 튜토리얼에서.
이것에 Spock에 대한 전체 교육 자습서 시리즈 , 지금까지 Spock 프레임 워크를 사용하여 단위 테스트를 작성했습니다. 단위 테스트는 일반적으로 모든 통합 지점 또는 외부 호출이 모의 호출 또는 스텁으로 대체되는 단일 클래스를 테스트합니다.
반면 통합 테스트는 두 부분 간의 통합 지점을 테스트합니다. 예를 들어, 두 서비스 간의 계약 테스트, 서비스와 데이터베이스 간의 통합 테스트 등
이 튜토리얼에서는 Spock을 사용하여 통합 테스트 (휴식 서비스 등) 및 기능 테스트 . 예를 들어 , Spock과 Selenium 통합 등
다음은 비디오 자습서입니다.
학습 내용 :
Spring Spock 통합
Spock을 Spring boot MVC 기반 앱과 통합하는 방법에 대한 예제를 통해이를 이해해 보겠습니다.
예제와 함께 리눅스에서 정렬 명령
Spring은 풍부한 주석 세트를 가지고 있고 JUnit과 잘 통합되지만 Spock은 읽기 쉬운 BDD 스타일 테스트 접근 방식을 추가하거나 추가하여 테스트 사양을 매우 가독성있게 만듭니다.
신청에 관하여
엔드 포인트를 구현하는 나머지 기반 컨트롤러와 함께 gradle 기반 스프링 부트 스타터 애플리케이션을 사용합니다.
필수 종속성
스프링 부트 의존성에 더해, 우리는 일반적인 그루비 컴파일 의존성뿐만 아니라 Spock 코어 의존성을 추가 할 것입니다. 또 다른 Spock 기반 종속성은 스팍 스프링 , Spock 사양에서 Spring 기반 주석을 사용할 수 있습니다.
다음은 필수 종속성 목록입니다.
- 구현‘org.springframework.boot : spring-boot-starter’
- testImplementation‘org.springframework.boot : spring-boot-starter-test’
- “org.codehaus.groovy : groovy-all : 2.4.8”컴파일
- testCompile“org.spockframework : spock-core : 1.2-groovy-2.4”
- testCompile 그룹 :‘org.spockframework’, 이름 :‘spock-spring’, 버전 :‘1.2-groovy-2.4’
시작하기
실제 테스트를 시작하겠습니다.
첫 번째 테스트에서는 추가 한 컨트롤러 클래스에 대해 Bean이 생성되는지 확인합니다. 이를 위해 테스트가 실행될 때 애플리케이션이 시작되어야합니다.
이를 달성하기 위해 @ SpringBootTest 테스트가 실행되기 전에 애플리케이션 컨텍스트 실행을 보장하는 주석입니다.
다음은 테스트 코드입니다.
@SpringBootTest class SampleSpringSpec extends Specification { @Autowired private WebController webController def 'when context is loaded then controller bean is created'() { expect: 'the WebController is created' webController != null } }
위의 코드에서 우리가 사용한 것을 볼 수 있습니다. 안녕하세요. 테스트가 실행되기 전에 ApplicationContext를 시작하도록 보장하는 주석이며 Spring 주석에 따라 WebController 빈도 자동 연결했습니다.
테스트는 Webcontroller bean이 애플리케이션 컨텍스트의 일부로 인스턴스화되는지 확인합니다.
웹 컨트롤러에 의해 노출 된 엔드 포인트에 도달하고 Spring 프레임 워크 테스트 클래스 (예 : MockMvc 및 MockMvcRequestBuilders)를 통해 응답 코드와 응답 텍스트의 유효성을 검사하는 다른 테스트를 살펴 보겠습니다.
아래 테스트 코드를 참조하십시오.
@AutoConfigureMockMvc(secure=false) @WebMvcTest() class SampleMvcSpec extends Specification{ @Autowired private MockMvc mvc def 'assert response and status code for /greeting'() { expect: 'status code as 200 and response string as Hello world!' mvc.perform(MockMvcRequestBuilders.get('/hello')) .andExpect(MockMvcResultMatchers.status().isOk()) .andReturn().response.contentAsString == 'Hello world!' } }
Spock Selenium 통합
다음은 비디오 자습서입니다.
이제 Spock을 사용하여 Selenium 기반 테스트를 통합하는 방법의 예를 살펴 보겠습니다. 여기에는 다른 특정 종속성이 필요하지 않지만 일반적으로 기존 방법을 사용하여 BDD를 사용하여 셀레늄 테스트를보다 효과적으로 구성 할 수 있습니다.
이것에 예, ChromeWebDriver를 통해 Google 검색에서 키워드를 검색하고 검색 결과 페이지의 제목을 확인하는 간단한 셀레늄 테스트를 볼 수 있습니다.
class SeleniumSpec extends Specification { private static def WebDriver driver = new ChromeDriver() def 'cleanupSpec'() { if(driver != null) { driver.close() } } def 'selenium integration with spock'() { given: driver.navigate().to('https://www.google.co.in') WebElement searchBox = driver.findElement(By.cssSelector('input(name=q)')); WebElement submitSearchButton = driver.findElement(By.cssSelector('input(name=btnK)')); when: searchBox.sendKeys('India') Thread.sleep(5000) submitSearchButton.click() def title = driver.getTitle() then: title.toLowerCase()contains('india') } }
ChromeDriver 용 webdriver 인스턴스를 선언하고 사양 내에서 어떻게 사용했는지 확인하세요.
또한 주어진 단계에서 테스트 실행에 필요한 모든 웹 요소를 선언 / 정의했습니다.
Spock 프레임 워크는 기존 자동화 프레임 워크와 통합 및 사용할 수 있으며, Java / JUnit 기반 테스트를 Spock으로 대체하여 Groovy의 선언적 프로그래밍 기능을 활용할 수도 있습니다.
결론
이 자습서에서는 Spock 기반 테스트를 통합 테스트 및 End-2-End 테스트와 같은 다른 프레임 워크 및 테스트 유형과 통합하는 다양한 방법을 살펴 보았습니다.
Spock과 Spring 프레임 워크 및 Selenium 기반 통합 테스트의 통합 예를 보았습니다. 이와 유사하게 Spock을 사용하여 REST 기반 API의 통합 테스트를 위해 Rest 클라이언트로 테스트를 작성할 수도 있습니다.
가장 중요한 Spock 인터뷰 질문 목록을 다루는 다가오는 튜토리얼로 Spock 인터뷰를 빠르게 준비하세요 !!