2011-08-03 3 views
0

현재 자바로 가지고있는 HttpServlet 클래스에 대한 단위 테스트를 설정하려고합니다. 그러나 Jetty 문서는 부족한 모양이고 조금 붙어 있습니다. 서블릿에서 getContextPath()를 사용하여 인쇄 할 때 contextPath가/hbc라는 것이 확실합니다. 그러나, 나는 a) addServlet() 메소드에 대한 두 번째 매개 변수가 있어야하고 b) URI가 무엇이어야하는지에 대해 확신하지 못한다.부두 항상 Java에서 400 상태 코드를 반환합니다. HttpServlet

상태 코드는 400으로 돌아오고 내용은 null입니다. 나는 그것이 올바른 위치를 가리키고 있지 않기 때문에인지 확신 할 수 없다. (그러나 나는 그것이 404로 이어질 것이라고 생각한다.) 그렇지 않으면 뭔가가 빠져있다.

서블릿에는 init(), processRequest(), doGet() 및 doPost() 메소드가 있습니다.

생각하십니까?

public class HBCUnitTests extends TestCase { 
    private ServletTester tester; 

    @BeforeClass 
    public void setUp() throws Exception { 
     tester = new ServletTester(); 
     tester.setContextPath("/hbc"); 
     tester.addServlet(HubCommServlet.class, "/"); 
     tester.start(); 
    } 

    @AfterClass 
    public void tearDown() throws Exception { 
     tester.stop(); 
    } 

    @Test 
    public void test() throws Exception { 
     HttpTester request = new HttpTester(); 
     request.setMethod("POST"); 
     request.setVersion("HTTP/1.1"); 
     request.setURI("/"); 

     System.out.println(request.generate()); 

     HttpTester response = new HttpTester(); 
     response.parse(tester.getResponses(request.generate())); 

     System.out.println(response.getContent()); 
     System.out.println(response.getURI()); 
     System.out.println(response.getReason()); 

     assertEquals(200,response.getStatus()); 
     assertEquals("<h1>Hello Servlet</h1>",response.getContent()); 
    } 
} 

답변

0

내가 서블릿을 테스트하기 위해 JMock을 사용하여 끝났다.

1

addServlet()의 두 번째 인수는 서블릿 매핑입니다.

의 contextPath는 /hbc하고 서블릿은 다음 당신이 /hbc/을 요청해야한다는 기대 /에 매핑 된 경우 :

HttpTester request = new HttpTester(); 
... 
request.setURI("/hbc/"); 
+0

그래서 URI는 컨텍스트 경로 + 해당 함수의 두 번째 매개 변수 여야합니까? 또한 서블릿이 매핑되는 위치를 잘 모르겠습니다. 코드 매핑 방식에서는 특별한 것이 없으므로 매핑되는 위치를 어떻게 결정할 수 있습니까? – joshholat

+0

addServlet의 두 번째 인수는 web.xml의 ''과 동일하게 보입니다. –

+0

그래, 나는/servlet/hbc, addSerlvet 인수/HubComm (이는 . 수동으로 URI를/hbc/HubComm으로 설정해야합니까? 그렇다면 여전히 400을 얻고 있습니다. – joshholat

관련 문제