我有一堂这样的课:
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模拟服务<代码>EasyMock。createMock()后跟replay()不起作用。P、 S:这是其他开发人员编写的遗留代码,我们不能在这里更改代码。
考虑到服务的范围,假设测试在同一个包中,您可以执行以下操作。
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即可。服务=服务代码>依据
Field field = Util.class.getDeclaredField("service");
field.setAccessible(true);
field.set(null, service);