Loading...
Spring Framework Reference Documentation 7.0.2의 MockMvc and Geb의 한국어 번역본입니다.
아래의 경우에 피드백에서 신고해주신다면 반영하겠습니다.
감사합니다 :)
이전 섹션에서 WebDriver와 함께 MockMvc를 사용하는 방법을 살펴보았습니다. 이 섹션에서는 Geb을 사용하여 우리의 테스트를 더욱 Groovy스럽게 만들어 봅니다.
Geb은 WebDriver에 의해 지원되므로, WebDriver로부터 얻는 동일한 이점 의 많은 부분을 제공합니다. 그러나 Geb은 일부 보일러플레이트 코드를 대신 처리해 줌으로써 작업을 더욱 쉽게 만들어 줍니다.
다음과 같이 MockMvc를 사용하는 Selenium WebDriver로 Geb Browser를 쉽게 초기화할 수 있습니다:
1def setup() { 2 browser.driver = MockMvcHtmlUnitDriverBuilder 3 .webAppContextSetup(context) 4 .build() 5}
이것은 MockMvcHtmlUnitDriverBuilder를 사용하는 간단한 예제입니다. 더 고급<br>사용법은<br>Advanced MockMvcHtmlUnitDriverBuilder를 참고하세요. |
이는 서버로 localhost를 참조하는 모든 URL이 실제 HTTP 연결 없이 우리의
MockMvc 인스턴스로 전달되도록 보장합니다. 그 외의 URL은 일반적인 네트워크 연결을
사용하여 요청됩니다. 이를 통해 CDN 사용을 쉽게 테스트할 수 있습니다.
이제 애플리케이션을 Servlet 컨테이너에 배포할 필요 없이 평소처럼 Geb을 사용할 수 있습니다. 예를 들어, 다음과 같이 메시지를 생성하는 뷰를 요청할 수 있습니다:
1to CreateMessagePage
그런 다음 폼을 채우고 제출하여 다음과 같이 메시지를 생성할 수 있습니다:
1when: 2form.summary = expectedSummary 3form.text = expectedMessage 4submit.click(ViewMessagePage)
인식되지 않는 메서드 호출이나 프로퍼티 접근 또는 참조는 모두 현재 페이지 객체로 포워드됩니다. 이는 WebDriver를 직접 사용할 때 필요했던 많은 보일러플레이트 코드를 제거해 줍니다.
WebDriver를 직접 사용하는 것과 마찬가지로, 이는 페이지 객체 패턴을 사용함으로써 우리의 HtmlUnit 테스트 설계를 개선합니다. 앞서 언급했듯이, 페이지 객체 패턴은 HtmlUnit과 WebDriver 모두에서 사용할 수 있지만, Geb에서는 훨씬 더 쉽게 사용할 수 있습니다.
새로운 Groovy 기반 CreateMessagePage 구현을 살펴보겠습니다:
1class CreateMessagePage extends Page { 2 static url = 'messages/form' 3 static at = { assert title == 'Messages : Create'; true } 4 static content = { 5 submit { $('input[type=submit]') } 6 form { $('form') } 7 errors(required:false) { $('label.error, .alert-error')?.text() } 8 } 9}
CreateMessagePage는 Page를 확장합니다. Page의 세부 사항은 다루지 않지만,
요약하면 모든 페이지에 공통적인 기능을 포함합니다. 이 페이지를 찾을 수 있는 URL을 정의합니다.
이것을 통해 다음과 같이 페이지로 이동할 수 있습니다:
1to CreateMessagePage
또한 우리가 지정한 페이지에 있는지를 결정하는 at 클로저도 있습니다. 올바른 페이지에 있을
경우 true를 반환해야 합니다. 이것이 다음과 같이 올바른 페이지에 있다는 것을 단언할 수
있는 이유입니다:
1then: 2at CreateMessagePage 3errors.contains('This field is required.')
| 클로저 안에서 어설션을 사용하여, 잘못된 페이지에 있었던 경우 어디에서 문제가<br>발생했는지 확인할 수 있습니다. |
다음으로, 페이지 내에서 관심 있는 모든 영역을 지정하는 content 클로저를 생성합니다. 관심
있는 콘텐츠를 선택하기 위해
jQuery-ish Navigator API를 사용할 수 있습니다.
마지막으로, 다음과 같이 새로운 메시지가 성공적으로 생성되었는지 확인할 수 있습니다:
1then: 2at ViewMessagePage 3success == 'Successfully created a new message' 4id 5date 6summary == expectedSummary 7message == expectedMessage
Geb을 최대한 활용하는 방법에 대한 자세한 내용은 The Book of Geb 사용자 설명서를 참고하세요.
MockMvc and WebDriver
MockMvc vs End-to-End Tests