Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我可以用Mockito测试使用内省的代码吗?_Java_Mocking_Mockito_Introspection - Fatal编程技术网

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”);
}
}