我在方法下面有一段代码。
AdminServiceProxy proxy=new AdminServiceProxy();
boolean flag=proxy.isAdminFree();
如何模拟" AdminServiceProxy"使用Jmock
。因为使用new运算符创建了对象。
答案 0 :(得分:0)
你不能。
一种可能的解决方案是创建一个AdminServiceProxyFactory接口和实现:
public interface AdminServiceProxyFactory {
public AdminServiceProxy createAdminServiceProxy();
}
public class AdminServiceProxyFactoryImpl {
public AdminServiceProxy createAdminServiceProxy() {
return new AdminServiceProxy();
}
}
然后在你的课堂上添加一个setter和private属性:
public class Foo {
private AdminServiceProxyFactory adminServiceProxyFactory;
...
public void setAdminServiceProxyFactory(AdminServiceProxyFactory factory) {
adminServiceProxyFactory = factory;
}
public myMethod() {
...
AdminServiceProxy proxy=adminServiceProxyFactory.createAdminServiceProxy();
boolean flag=proxy.isAdminFree();
...
}
}
现在您可以创建一个模拟AdminServiceProxyFactory并将其注入您的类。然后,在调用它时,告诉模拟工厂返回模拟的AdminServiceProxy。
答案 1 :(得分:0)
jMock不支持嘲笑"未来的对象"或嘲弄建设者。
其他模拟库提供此类支持。其中一个(我开发的)是JMockit,其语法最初的灵感来自jMock" Expectations"。在这种情况下,我们可以:
@Test
public void exampleTestThatMocksAFutureObject(@Mocked AdminServiceProxy proxy) {
new Expectations() {{ proxy.isAdminFree(); result = true; }};
// Call code under test which instantiates an AdminServiceProxy...
boolean adminFree = new AdminServiceProxy().isAdminFree();
assertTrue(adminFree);
}