【问题标题】:Mock static field using EasyMock使用 EasyMock 模拟静态字段
【发布时间】:2020-07-09 18:39:29
【问题描述】:

我有这样的课:

class Util {
    
    @Autowired
    static DbService service;
    
    public static Data formatData() {
        Data data=service.getData();
        //some logic here
    }
    
    public static void initService() {
        if(service==null){
            service=ObjectLocation.getObject(DbService .class);
        }
    }
}

我需要使用 EasyMock 模拟 serviceEasyMock.createMock() 后跟 replay() 不起作用。 P.S.:这是其他开发人员编写的遗留代码,我们无法在此处更改代码。

【问题讨论】:

    标签: junit easymock


    【解决方案1】:

    给定service的范围,假设测试在同一个包中,你可以这样做。

    public class UtilTest {
    
        @Test
        public void formatData() {
            DbService service = mock(DbService.class);
            Data expected = new Data();
            expect(service.getData()).andReturn(expected);
            replay(service);
    
            Util.service = service;
    
            assertSame(expected, Util.formatData());
    
            verify(service);
        }
        
    }
    

    如果由于某种原因,测试不在同一个包中,只需将Util.service = service;替换为

    Field field = Util.class.getDeclaredField("service");
    field.setAccessible(true);
    field.set(null, service);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-10
      • 2016-12-05
      • 1970-01-01
      • 2017-05-19
      相关资源
      最近更新 更多