 |
|
배치와 검증
실제로 경기 목록을 반환하는지 RESTful한 서비스를 테스트할 수 있으려면 그 전에 애플리케이션을 배치해야 한다. 이 절에서 어떻게 하는지 살펴보자.
web.xml 설정
운좋게도 Restlet 애플리케이션 배치는 너무나도 쉽다. 그저 평범한 WAR 파일을 하나 만들어 적당히 web.xml 파일을 설정하면 된다.
Restlet 애플리케이션이 서블릿 컨테이너에서 제대로 동작하는지 보려면 다음과 같이 동작하도록 web.xml 파일을 바꿔줘야 한다.
- 애플리케이션을 적절히 로드
- 모든 요구 사항이 프레임워크의 커스텀 서블릿을 통해 이뤄지도록 경로 조정
결과적으로 web.xml은 Listing 22처럼 되야 한다.
Listing 22. 예제 web.xml 파일
<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<display-name>RESTful racing</display-name>
<context-param>
<param-name>org.restlet.application</param-name>
<param-value>RaceApplication</param-value>
</context-param>
<servlet>
<servlet-name>RestletServlet</servlet-name>
<servlet-class>com.noelios.restlet.ext.servlet.ServerServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>RestletServlet</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
</web-app>
|
 | |
이 튜토리얼에서 사용된 소스 코드는 자동으로 war 파일을 빌드한 war 작업을 포함하고 있고, 빌드 파일은 톰캣 로컬 인스턴스에 WAR 파일 배치를 지원한다.
|
|
Listing 22의 처음 부분에서 볼 수 있듯 org.restlet.application은 Restlet 애플리케이션의 클래스 이름, 즉 RaceApplication과 한 쌍이다(패키지 이름으로 썼다면 전체 이름을 다 썼어야 했겠지만). 문서의 마지막 절을 보면 모든 요청이 RestletServlet 타입과 매핑되었음에 주목하자. 그 바로 전에는 com.noelios.restlet.ext.servlet.ServerServlet 클래스와 매핑되었다.
RESTful하게 테스트하기
RESTful한 웹 서비스를 테스트하는 건 Listing 18의 테스트 케이스를 다시 돌리는 것이다.
테스트를 바라보는 또 다른 시각에서 다른 것도 생각해 보자. Restlet의 Client 객체는 기본 HTTP 명령인 GET, PUT, POST, DELETE를 지원한다. 그리고 Client 객체는 다른 프로토콜에 대해서도 그렇게 지원할 수 있다. 이번 경우에서는 그저 HTTP에만 의존하긴 하지만 말이다.
GET 요청은 이미 잘 동작하고 있고(그림 1 참조) 따라서 다른 테스트를 작성해보자. 이번에는 POST에 기대 행동에 살을 붙여보자. 즉 RacesResource 클래스를 통해 새로운 경기 생성을 테스트해보자.
그림 1. 브라우저에서 RESTful한 GET 요청 보기
POST를 테스트하려면 XML 요청 문서를 관련 정보로 채워 넣을 필요가 있으며 서비스가 성공적으로 응답을 반환하는지 확인할 필요가 있다. 물론 이 테스트를 작성하는 건 꽤나 간단하다. 기존 JUnit 클래스에 코드 몇 줄을 추가하는 게 전부다. Listing 23에 보였다.
Listing 23. createRace 테스트 케이스
private static String raceXML = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +
"<acme-races>\n" +
" <race name='Limerick 2008 Half' date='2008-05-12' distance='13.4'>\n" +
" <description>erin go brach</description>\n" +
" </race>\n" +
"</acme-races>";
@Test
public void createRace() {
Form form = new Form();
form.add("data", this.raceXML);
Representation rep = form.getWebRepresentation();
Client client = new Client(Protocol.HTTP);
Response response =
client.post("http://localhost:8080/racerrest/race/", rep);
assertTrue(response.getStatus().isSuccess());
|
보다시피 Listing 23처럼 XML 문서를 나타내는 String 형식을 빠르게 만들어 낼 수 있다. 이 테스트 케이스에서 필자는 Limerick 2008 Half라는 새로운 경기를 생성할 것이다. 그리고 나서 이 문서를 서버에 POST하기 위해 Restlet 프레임워크의 Client 객체를 사용한다. 마지막으로 성공 여부를 가리키는 값이 반환되는지 확인한다.
이제 테스트를 돌려보자. 실패했을 것이다. 그렇지 않은가? 아직 POST 요청 코드를 구현하지 않았기 때문이다. 다음 절에서 해보자.
|