我可以测试使用Mockito自检的代码吗?
问题描述:
我正在为使用自省的代码块编写单元测试;具体而言,它调用getDeclaredField()
关于我想模拟的类,并尝试获取该字段的值。有没有办法用Mockito来嘲笑这个?我可以测试使用Mockito自检的代码吗?
答
Mockito通过创建一个模拟使用您试图愚弄的相同内省库。即使你可以哄骗它工作,但我不确定要理解或维护是多么容易。
我建议创建一个非常小的嵌套类,并在其上运行正常:
public class YourTest {
private static class SampleClass {
String field1;
int field2;
}
@Test public void introspectionWorks() {
yourSUT.process(new SampleClass());
}
}
除非是,提取难以模拟的呼叫到一个方法,你可以很容易地存根:
public class YourSUT {
/* ... */
/* package */ Class<?> getFieldType(Object object, String fieldName) {
return object.getClass().getDeclaredField(fieldName).getType();
}
}
public class YourTest {
@Test public void introspectionWorks() {
YourSUT spy = Mockito.spy(yourSUT);
doReturn(String.class).when(spy).getFieldType(myObject, "someStringField");
}
}