我目前正在尝试为Java中的HttpServlet类设置单元测试。但是,缺少Jetty文档,而且我有些困惑。我相当确定contextPath是/ hbc,因为我在servlet中使用getContextPath()将其打印出来。但是,我不确定a)addServlet()方法的第二个参数应该是什么,b)URI应该是什么。

状态代码将继续返回400,并且内容为null。我不确定这是否是因为我没有指向正确的位置(但是我认为那会导致404错误)或是否缺少其他内容。

Servlet具有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());
    }
}

最佳答案

看来addServlet()的第二个参数是servlet映射。

如果contextPath是/hbc并且您的servlet映射到/,那么我希望您需要请求/hbc/

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

10-04 12:15