我可以测试使用Mockito内省的代码吗?

时间:2013-04-24 23:49:21

标签: java mocking mockito introspection

我正在为使用内省的代码块编写单元测试;特别是它在我想要模拟的类上调用getDeclaredField()并尝试获取该字段的值。有没有办法用Mockito嘲笑这个?

1 个答案:

答案 0 :(得分:1)

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