我需要一些帮助:
Example:
void method1{
MyObject obj1=new MyObject();
obj1.method1();
}
我想嘲笑obj1.method1()
在我的测试中,但为了透明,所以我不想制作和更改代码。
Mockito 有什么办法可以做到这一点吗?
@edutesoy 的答案指向了文档PowerMockito
并提到构造函数模拟作为提示,但没有提及如何将其应用于问题中的当前问题。
这是一个基于此的解决方案。从问题中获取代码:
public class MyClass {
void method1 {
MyObject obj1 = new MyObject();
obj1.method1();
}
}
以下测试将创建一个模拟MyObject
通过准备实例化它的类来实例化它(在这个例子中我称之为MyClass
) with PowerMock
并让PowerMockito
存根构造函数MyObject
类,然后让你存根MyObject
实例method1()
call:
@RunWith(PowerMockRunner.class)
@PrepareForTest(MyClass.class)
public class MyClassTest {
@Test
public void testMethod1() {
MyObject myObjectMock = mock(MyObject.class);
when(myObjectMock.method1()).thenReturn(<whatever you want to return>);
PowerMockito.whenNew(MyObject.class).withNoArguments().thenReturn(myObjectMock);
MyClass objectTested = new MyClass();
objectTested.method1();
... // your assertions or verification here
}
}
这样你的内部method1()
调用将返回您想要的内容。
如果您喜欢单行代码,您可以通过创建模拟和内联存根来缩短代码:
MyObject myObjectMock = when(mock(MyObject.class).method1()).thenReturn(<whatever you want>).getMock();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)