java—模仿servlettester(来自jetty)加载的类中的内容

pxq42qpu  于 2021-07-06  发布在  Java
关注(0)|答案(0)|浏览(184)

我目前正在用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");

    }
}

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题