【问题标题】:Easymock with daoEasymock 与 dao
【发布时间】:2014-12-14 12:11:50
【问题描述】:

假设我有一个 Dao 类,它有一个建立连接并从数据库读取 int 的方法。

public class Dao {
    public static final Dao INSTANCE = new Dao();

    public int getSomething() {
        //connection
        return 1;
    }
}

我有一个 Servlet,里面有这样的代码。

int i = Dao.INSTANCE.getSomething();

问题是我不知道如何模拟这个 Dao.INSTANCE 调用...... 例如,如果它是一个带有会话的 servlet。我可以做到这一点。

Session s = EasyMock.createMock(Session.class);
expect(request.getSession()).andReturn(s);

但我无法做到这样

Dao dao = EasyMock.createMock(Dao.class);
expect(Dao.INSTANCE).andReturn(dao);

【问题讨论】:

  • 所以你想mock Dao类对吗?
  • 是的,我想模拟 Dao 类

标签: junit dao easymock


【解决方案1】:

将 dao 设为实例变量,然后你就可以轻松地模拟它了:

public class MyServlet extends HttpServlet {
    Dao dao = Dao.INSTANCE;
}

MyServlet servlet = new MyServlet();
servlet.dao = EasyMock.createMock(Dao.class);

【讨论】:

    【解决方案2】:

    我建议您更改代码,以便调用方法将返回单例。比如

    public class Dao {
        public static Dao singleton;
    
        public static Dao getInstance(){
             if(singleton == null){
                   singleton = new Dao();
             }
         return singleton;
    
        }
    
        public int getSomething() {
            //connection
            return 1;
        }
    }
    

    然后使用 PowerMock 模拟 getInstance。 看看here的方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-04-14
      • 1970-01-01
      • 2013-02-24
      • 1970-01-01
      • 1970-01-01
      • 2011-11-25
      • 1970-01-01
      相关资源
      最近更新 更多