我正在为使用内省(introspection)的代码块编写单元测试;具体来说,它在我想要模拟的类上调用 getDeclaredField()
并尝试获取该字段的值。有没有办法用 Mockito 来模拟这个?
最佳答案
Mockito 使用您试图通过创建模拟来愚弄的相同内省(introspection)库进行操作。即使您可以哄骗它工作,我也不确定它是否容易理解或维护。
我建议创建一个非常小的嵌套类并对其进行正常操作:
public class YourTest {
private static class SampleClass {
String field1;
int field2;
}
@Test public void introspectionWorks() {
yourSUT.process(new SampleClass());
}
}
除此之外,将难以模拟的调用提取到一个您可以轻松 stub 的方法中:
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");
}
}
关于java - 我可以测试使用 Mockito 自省(introspection)的代码吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16204158/