我有一个类,它有两个方法。我想模拟这个类,然后模拟第一个方法,但不是第二个。
例如。
class C {
void m1() { ...}
boolean m2() { ... return flag;}
}
单元测试代码:
C cMock = Mockito.mock(C.class);
Mockito.doNothing().when(cMock).m1();
Mockito.when(cMock.m2()).thenCallRealMethod();
奇怪的是m2没有被调用。
我错过什么了吗?
缺少呼叫:cMock. m2();
这也是Mockito的位置。可以使用spy
。它允许您对真实对象进行部分模拟。
C cMock = Mockito.spy(new C());
Mockito.doNothing().when(cMock).m1();
实际的方法是在第3行被调用()。我已经添加了和注释。 为什么调用实际方法?我也尝试了PowerMockito.do返回,但是得到了同样的问题。
异常堆栈跟踪
使用或,是否有任何方法可以拦截对对象的非静态方法的调用,或者至少是对单例对象的非静态方法的调用? 以下类提供了一个示例: 但是,上面的类只提供了一个私有构造函数,因此不能对其进行扩展。使用返回部分模拟(spy)也不会起作用,因为类不提供无参数构造函数。 想要的嘲弄能以其他任何方式实现吗?对于非单例类可以这样做吗?
请有人帮助我在上面,也提供我的解决上述问题。
问题内容: 我有四个让我们说A,B,C,D的类,每个类都从另一个调用方法。 现在我已经模拟了类A,并且想模拟使用嘲笑的方法 并希望在递归方法调用上获取“ foo” 应该回来 我试过了 when(a.getB()。getC()。getD())。thenReturn(“ foo”); 但是得到了nullPointerException 然后我尝试 doReturn(“ foo”)。when(a.get
我有4个类让说A,B,C,D,每一个调用的方法从另一个。 现在我已经模拟了类A,并想使用mockito模拟一个方法 但得到nullPointerException 然后我试着 doReturn(“foo”).When(A.getb().getc().getd()); 但我不能一次就做到吗?如有任何帮助,我们将不胜感激。