getInstance()而Mockito不允许模拟静态方法,因此以下行将不起作用
when(FormatterService.getInstance()).thenReturn(formatter);
有两种方法可以解决此问题:
使用其他模拟工具,例如PowerMock,该工具可以模拟静态方法。
重构代码,以免依赖静态方法。我能想到的最小侵入性方法是通过向其
DriverSnapshotHandler
注入FormatterService
依赖项的构造函数。该构造函数将仅在测试中使用,并且您的生产代码将继续使用实际的单例实例。public static class DriverSnapshotHandler {private final FormatterService formatter;//used in production prepublic DriverSnapshotHandler() { this(FormatterService.getInstance());}//used for testsDriverSnapshotHandler(FormatterService formatter) { this.formatter = formatter;}public String getImageURL() { return formatter.formatTachoIcon();}
}
然后,您的测试应如下所示:
FormatterService formatter = mock(FormatterService.class);when(formatter.formatTachoIcon()).thenReturn("MockedURL");DriverSnapshotHandler handler = new DriverSnapshotHandler(formatter);handler.getImageURL();verify(formatter, atLeastonce()).formatTachoIcon();
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)