【问题标题】:Can I test code that uses introspection with Mockito?我可以使用 Mockito 测试使用自省的代码吗?
【发布时间】:2013-04-18 17:20:14
【问题描述】:

我正在为使用自省的代码块编写单元测试;具体来说,它在我要模拟的类上调用getDeclaredField() 并尝试获取该字段的值。有没有办法用 Mockito 模拟这个?

【问题讨论】:

    标签: java mocking mockito introspection


    【解决方案1】:

    Mockito 使用您试图通过创建 Mock 来欺骗的相同自省库进行操作。即使你可以哄它工作,我也不确定它是否容易理解或维护。

    我建议创建一个非常小的嵌套类并正常操作它:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-03
      • 1970-01-01
      • 2019-08-25
      • 2019-05-24
      • 1970-01-01
      相关资源
      最近更新 更多