jas*_*ing 16 java junit unit-testing mockito
用mock编写单元测试时遇到问题.有一个我需要模拟的对象有很多getter,我在代码中调用它们.但是,这些不是我单元测试的目的.那么,是否有一种方法可以模拟所有方法而不是逐个模拟它们.
这是代码示例:
public class ObjectNeedToMock{
private String field1;
...
private String field20;
private int theImportantInt;
public String getField1(){return this.field1;}
...
public String getField20(){return this.field20;}
public int getTheImportantInt(){return this.theImportantInt;}
}
Run Code Online (Sandbox Code Playgroud)
这是我需要测试的服务类
public class Service{
public void methodNeedToTest(ObjectNeedToMock objectNeedToMock){
String stringThatIdontCare1 = objectNeedToMock.getField1();
...
String stringThatIdontCare20 = objectNeedToMock.getField20();
// do something with the field1 to field20
int veryImportantInt = objectNeedToMock.getTheImportantInt();
// do something with the veryImportantInt
}
}
Run Code Online (Sandbox Code Playgroud)
在测试类中,测试方法就像
@Test
public void testMethodNeedToTest() throws Exception {
ObjectNeedToMock o = mock(ObjectNeedToMock.class);
when(o.getField1()).thenReturn(anyString());
....
when(o.getField20()).thenReturn(anyString());
when(o.getTheImportantInt()).thenReturn("1"); //This "1" is the only thing I care
}
Run Code Online (Sandbox Code Playgroud)
那么,是否有一种方法可以避免将无用的"field1"的所有"when"写入"field20"
Sim*_*mY4 31
您可以控制模拟的默认答案.在创建模拟时,使用:
Mockito.mock(ObjectNeedToMock.class, new Answer() {
@Override
public Object answer(InvocationOnMock invocation) throws Throwable {
/*
Put your default answer logic here.
It should be based on type of arguments you consume and the type of arguments you return.
i.e.
*/
if (String.class.equals(invocation.getMethod().getReturnType())) {
return "This is my default answer for all methods that returns string";
} else {
return RETURNS_DEFAULTS.answer(invocation);
}
}
}));
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
17619 次 |
最近记录: |