Easymock与dao

时间:2014-12-14 12:11:50

标签: junit dao easymock

让我们假设我有一个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);

2 个答案:

答案 0 :(得分:0)

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

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了解具体方法。

答案 1 :(得分:0)

使dao成为一个实例变量,然后你可以轻松地模拟它:

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

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