超级
public class BasicDao {
public Object createQuery() {
return new Object();
}
}
实施
public class MyDAO implements BasicDao {
public Object getMyData() {
Object obj = createQuery();
// more code...
return ...;
}
}
我需要测试getMyData()
方法,我想模拟/禁止createQuery()
方法,因为它会在测试环境中失败。
谢谢!
答案 0 :(得分:1)
不要这样做测试。这称为部分模拟,这是错误的,这意味着已经编写的代码没有使用良好的面向对象的设计。一个人应该赞成Composition OVER Inheritance。
然而,DAO是代表系统边界的对象,即
在这种情况下,您应该编写集成测试,
可能需要更多的设置和更多的时间来运行,但从长远来看它会更好。
@ user3386493的回答在技术上是正确的,但我建议使用这种与间谍的存根(否则执行实际的方法代码):
MyDAO daoSpy = Mockito.spy(new MyDAO());
doReturn(new Object()).when(daoSpy).createQuery();
答案 1 :(得分:0)
你可以使用Mockito来做到这一点。
@Test
public void testGetMyData() {
MyDAO dao = new MyDAO();
MyDAO daoSpy = Mockito.spy(dao);
Mockito.when(daoSpy.createQuery()).thenReturn(new Object());
}