Java 我可以用Mockito测试使用内省的代码吗?
我正在为使用内省的代码块编写单元测试;具体来说,它对我要模拟的类调用Java 我可以用Mockito测试使用内省的代码吗?,java,mocking,mockito,introspection,Java,Mocking,Mockito,Introspection,我正在为使用内省的代码块编写单元测试;具体来说,它对我要模拟的类调用getDeclaredField(),并尝试获取字段的值。有没有办法用Mockito来模拟这一点?Mockito使用与您试图通过创建模拟来愚弄的内省库相同的操作。即使你能诱使它工作,我也不确定它是否容易理解或维护 我建议创建一个非常小的嵌套类并在其上正常运行: public class YourTest { private static class SampleClass { String field1; i
getDeclaredField()
,并尝试获取字段的值。有没有办法用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");
}
}
公共类YourSUT{
/* ... */
/*package*/Class getFieldType(对象对象,字符串字段名){
返回object.getClass().getDeclaredField(fieldName).getType();
}
}
公共课考试{
@测试公共空间自省工作(){
YourSUT spy=Mockito.spy(YourSUT);
doReturn(String.class).when(spy.getFieldType)(myObject,“someStringField”);
}
}