-
[17] Spring Web MVC : HtmlUnitSpring/Spring boot 2020. 6. 26. 08:55반응형
[HtmlUnit]
HtmlUnit은 HTML를 unit test 하기 위한 tool입니다. Spring boot는 HtmlUnit에 대한 자동설정을 지원합니다.
HtmlUnit을 사용하기 위해서는 먼저 관련된 두 가지 의존성을 추가해야 합니다. pom.xml을 열어 dependencies tag 안에 다음의 내용을 추가해주세요.
<dependency> <groupId>org.seleniumhq.selenium</groupId> <artifactId>htmlunit-driver</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>net.sourceforge.htmlunit</groupId> <artifactId>htmlunit</artifactId> <scope>test</scope> </dependency>
HtmlUnit을 통해 진행하는 test에 대해 적용할 수 있는 여러가지 요소들이 있습니다. 자세한 내용은 HtmlUnit에 대한 reference를 참고해 주세요. (reference 보기)
- form을 가져와서 submit하는 test mock-up
- 특정 browser를 지정하여 html rendering 결과를 받아올 수 있고,
- html 문서의 여러 element에 접근하여 확인할 수 있습니다.(HtmlPage.getElementById(String), HtmlPage.getElementByName(String) 등...)
- XPath는 xml 문서를 navigation할 때 유용한 query이며 xml은 html을 포함하므로 HtmlUnit에서도 XPath를 사용하여 query 할 수 있습니다.
- css selector를 사용할 수 있습니다.
- 마지막 WebClient constructor를 사용하면 proxy server 정보를 통해 연결해야하는 경우 proxy server 정보를 지정할 수 있습니다.
[HtmlUnit 사용한 test 예제]
HtmlUnit의 WebClient 객체를 사용하여 MockMvc보다 Html에 특화된 test를 진행할 수 있습니다. 여기에서는 ~/hello로 request 시 response 되는 page에서 첫 번째 h1 tag 요소를 찾아 그 안의 내용이 사용자가 원하는 내용인지 확인하는 예를 살펴보도록 합니다.
상기 내용에 해당하는 test code는 다음과 같습니다.
import static org.assertj.core.api.Assertions.assertThat; import static org.hamcrest.Matchers.containsString; import static org.hamcrest.Matchers.is; import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; @RunWith(SpringRunner.class) @WebMvcTest(SampleController.class) public class SampleControllerTest { @Autowired WebClient webClient; // ① @Test public void hello_HtmlUnit_Test() throws Exception { HtmlPage page = webClient.getPage("/hello"); // ② HtmlHeading1 h1 = page.getFirstByXPath("//h1"); // ③ assertThat(h1.getTextContent()).isEqualToIgnoringCase("dave"); // ④ } }
① HtmlUnit의 WebClient를 주입받음.
② getPage() method는 매개 값으로 받은 URI로 request 하여 response 된 결과를 Page type의 객체로 반환합니다. Page type의 객체를 받아줄 때 Page type의 특수화된 type에 해당하는 HtmlPage type으로 받아주면 더 많은 행동을 할 수 있습니다.
③ getFirstByXPath() method를 통해 XPath로 가장 앞에 있는 h1을 가져오는데, 이때 반환되는 값이 Object type이므로 h1에 대한 ojbect type을 담을 수 있는 HtmlHeading1 type으로 받아줍니다.
④ 받아온 HtmlHeading1 type 객체의 text content를 받아와서 원하는 결과(여기서는 "dave")와 일치하는지 확인합니다.
test 대상이 되는 controller와 view에 해당하는 code는 이전 post와 동일합니다.(이전 글 확인하기)
'Spring > Spring boot' 카테고리의 다른 글
[19] Spring Web MVC : Spring HATEOAS (0) 2020.06.30 [18] Spring Web MVC : ExceptionHandler (0) 2020.06.28 [16] Spring Web MVC : Template Engine (0) 2020.06.24 [15] Spring Web MVC : Index page and Favicon (0) 2020.06.24 [14] Spring Web MVC : Web JAR (0) 2020.06.23