我目前正在尝试为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/");