【问题标题】:Mock new Object using Mockito only仅使用 Mockito 模拟新对象
【发布时间】:2020-10-26 10:59:05
【问题描述】:

我在一个类中有这样的方法代码

public List<Auth_token> getAuthToken(String User) throws SQLException {
        List<Auth_token> usersList = new ArrayList<Auth_token>();
        Connection connection = null;
        PreparedStatement ps = null;
        ResultSet rset = null;
        try {

            OracleDataSource dataSource = new OracleDataSource();
            dataSource.setURL("blah blah");
            dataSource.setUser("blah");

            //LOGGER.log(Level.INFO,"username +: "+config.getUsername());
            dataSource.setPassword("blah");

            Connection conn = dataSource.getConnection();
            String query = "blah query";
//more code
}

我只需要使用 mockito 来模拟 oracle 数据源。我知道如何使用 power mockito,但我只能使用 mockito 来做到这一点。请帮帮我。

【问题讨论】:

  • 您需要更改您的实现,以便注入 OracleDataSource 实例或创建它的工厂。
  • 我无法更改实现,因为该代码是由其他人编写的。我只需要提高代码覆盖率。
  • 使用 mockito,您无需更改编写的代码。相反,您模拟代码将响应的内容(无需访问数据库)。例如,在您省略的代码中,您是否返回了一个 select 语句?也许您可以用一系列行来模拟 select 语句并避免数据库调用。
  • 你不能模拟这个,这是一个设计实现缺陷,你试图在每次调用方法时获取连接,实现本身是错误的,很难编写单元测试证明了这一点。跨度>

标签: java testing mocking mockito


【解决方案1】:

您不能用mockito 模拟使用new 运算符创建的东西。

您必须将数据源创建代码与查询执行分离。

例如,您可以引入Factory Pattern 来实现这一目标。

【讨论】:

    猜你喜欢
    • 2023-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多