我目前正在用jetty的servlettester运行单元测试。但是现在我有了一个servlet,它创建了到数据库的连接。为了使我的测试不可靠,我需要“模拟”连接。
这里的问题是,我不直接创建类的示例,而只是将类路径传递给 tester.addServlet()
所以我不能使用 @InjectMock
mockito的功能。
这是我目前的代码:
数据库连接类(需要模拟)
public class DBConn {
public boolean runSomething() {
return false; //actual code is not yet implemented
}
}
servlet:(只是一个快速的测试)
public class ConnectionTestServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setStatus(HttpServletResponse.SC_OK);
resp.setContentType("text/html");
resp.setCharacterEncoding("utf-8");
DBConn db = new DBConn();
if(db.runSomething()) {
resp.getWriter().println("true");
} else {
resp.getWriter().println("false");
}
}
}
以及我当前的单元测试:
public class ConnTest {
@Test
void testConn() throws Exception{
ServletTester tester = new ServletTester();
tester.setContextPath("/");
tester.addServlet(ConnectionTestServlet.class,"/conn");
tester.start();
HttpTester.Request request = HttpTester.newRequest();
request.setMethod("GET");
request.setURI("/conn");
request.put(HttpHeader.HOST,"localhost");
ByteBuffer output = request.generate();
String responseBody = HttpTester.parseResponse(tester.getResponses(output)).getContent().trim();
assertEquals(responseBody,"true");
}
}
暂无答案!
目前还没有任何答案,快来回答吧!