public class MainClass {
public void makeCall() {
CustomObject obj = new CustomObject();
obj.testMethod();
}
}
我想进行单元测试makeCall()
。所以我必须嘲笑CustomObject
在上面的示例中。我使用 Mockito 作为模拟框架。但是当我像这样模拟对象时mock(CustomObject.class)
. makeCall()
方法总是调用实际对象而不是模拟对象。无论如何,有没有模拟本地对象。请帮忙
单元测试友好的版本MainClass
应该有CustomObject
注入,例如:
public class MainClass {
private CustomObject customObject = new CustomObject(); // a default one if none is provided
public void setCustomObject(CustomObject customObject) {
this.customObject = customObject;
}
public void makeCall() {
this.customObject.testMethod();
}
}
你的测试将如下所示:
CustomObject mockCustomObject = mock(CustomObject.class);
when(mockCustomObject.testMethod()).thenReturn(...);
MainClass sut = new MainClass();
sut.setCustomObject(mockCustomObject);
sut.makeCall();
verify(mockCustomObject).testMethod();
有了Mockito的注解,可以进一步简化为:
public class MyClassTest {
@InjectMocks
private MainClass mainClass;
@Mock
private CustomObject mockCustomObject;
@Before
public void setup() {
MockitoAnnotations.initMocks(this); // or use mockito runner
}
@Test
public void testMakeCall() {
when(mockCustomObject.testMethod()).thenReturn(...);
mainClass.makeCall();
verify(mockCustomObject).testMethod();
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)