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