stub / mock一个私有方法



我目前正在测试一个方法updateIssuesTable()。这个方法是一个私有的void方法。更糟糕的是,在这个方法内部是对getConnection()的调用,它返回一个Connection,并且依赖于几个私有变量,这些私有变量依赖于一个初始化方法,而这个初始化方法当然又依赖于其他东西。

长话短说,这行代码:Connection conn = getConnection();

我根本不想执行,我只需要一个模拟连接来继续执行。测试方法如下:

public void testUpdateIssuesTable() throws Exception {
        PatchWriterTask task = new PatchWriterTask();
        String sql = "update val_issues set PATCH_CREATION_INFO = ? where VAL_ISSUE_ID = ?";
        when(task1.getConnection()).thenReturn(conn);
        when(conn.prepareStatement(sql)).thenReturn(updateStatement);
        Whitebox.invokeMethod(task, "updateIssuesTable");
    }

我测试的方法如下:

    private void updateIssuesTable() throws SQLException {
            PreparedStatement createStatement = null;
            String sql = "update val_issues set PATCH_CREATION_INFO = ? where VAL_ISSUE_ID = ?";
            Connection conn = getConnection();
            createStatement = conn.prepareStatement(sql);
            ...
    }

编辑:我在测试类中创建了一个模拟连接:

private Connection conn = mock(Connection.class);

您应该从连接池(C3P0或Tomcat连接池是很好的候选)中获得连接,然后您可以模拟ConnectionPool.getConnection()方法以返回连接模拟。

除此之外,寻找@RunWith MockitoJUnitRunner的例子来展示如何在测试类中@ injectmock。这里没有捷径——当你知道怎么做时,它很容易,但需要一点时间来掌握。

相关内容

  • 没有找到相关文章

最新更新