java - 我可以测试使用 Mockito 自省(introspection)的代码吗?

标签 java mocking mockito introspection

我正在为使用内省(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/

相关文章:

java - 如何在JAVA中删除JLabel上写的数字中的特定数字?

java - 当使用参数时,Testng 会忽略 @Test

python - 在 py.test 中模拟 REST 时出现导入问题

java - Mockito 模拟具有相似签名的相同命名方法

java - 带有 Powermockito 的 TestNG 静态方法失败

Java GAE : Process terminated because the backend took too long to shutdown

java - 匿名类实现接口(interface),不能有参数

java - 如何将多个 ArgumentMatchers 传递给 Mockito

Spring MockRestServiceServer 处理对同一 URI 的多个请求(自动发现)

java - 我应该如何使用mockito作为对象内部的对象,然后使用值