easyMock求助!
public class Context { public String getString(){ return "just for test"; } }
抽象类
public abstract class Myexample { public abstract String getTest(String s); static Context getContext(){ return new Context(); } }
待测试的类
public class ExampleClass extends Myexample{ private String getMsg(String s){ if ("yes".equals(s)){ return getContext().getString(); } else { return "no"; } } public String getTest(String s){ return this.getMsg(s); } }
测试方法
@Test public void testGetMsg() throws Exception { Context con = PowerMock.createPartialMock(Context.class,"getString"); ExampleClass ec = PowerMock.createPartialMock(ExampleClass.class, "getContext"); PowerMock.expectPrivate(ec,"getContext").andReturn(con); EasyMock.expect(con.getString()).andReturn("just for test"); EasyMock.replay(con); PowerMock.replayAll(); ExampleClass econe=new ExampleClass(); Method m=econe.getClass().getDeclaredMethod("ExampleClass",String.class); Object result=m.invoke("getTest", "yes"); Assert.assertEquals("just for test",result); PowerMock.verifyAll(); EasyMock.verify(con); }运行测试方法时抛错java.lang.IllegalStateException: no last call on a mock available,
大神们求解。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
代码大概是这样的:
String expected = "just for test";
/** 有时候那个getContext() 需要运行环境,可以mock掉。
Method method = MemberMatcher.method(..., "getContext");
Powermock.suppress(method);
*/
Powermock.replayAll();
ExampleClass tested=new ExampleClass();
String actual = (String)Whitebox.invoke(tested, "getMsg", "yes");
assertEqual(expected, actual);
PowerMock.verifyAll();
上面方法调用应该是这个,但还是没有运行到这块就抛错了。。。
这个异常是谁抛出来的?power还是easy?
PowerMock.expectPrivate(ec,"getContext").andReturn(con);这一句是有问题的,getContext是静态方法,而easymock的expect之类的方法是基于ThreadLocal来保存你最后调用的方法。所以对于静态方法的调用不能用这种方式来处理。
你可以考虑用PowerMock里面的针对static方法mock的处理方式来调用,plz check this link:http://code.google.com/p/powermock/wiki/MockStatic
p.s:
你的错误是从PowerMock.expectPrivate(ec,"getContext").andReturn(con);出来的。