我正在尝试为Play Framework 2.2编写单元测试。我尝试测试的课程会调用Play插件,例如
Exception e = new Exception();
MongoLogger.error(e);
插件的类定义是
MongoLogger extends Plugin
我如何使用Mockito模拟这个类并注册它。我想避免使用FakeApplication进行单元测试。任何帮助,将不胜感激。
答案 0 :(得分:0)
使用包装器设计模式将对MongoLogger
的调用封装到接口:
public interface Logger {
// methods
}
public interface DefaultLogger implements Logger {
private final MongoLogger mongoLogger;
public void error(Object e){
monoLogger.error(e);
}
}
在您的生产代码中,只要您调用Logger
,就可以使用MongoLogger
界面。在您的测试代码中,请注入mock:
Mockito.mock(Logger.class);
答案 1 :(得分:0)
我最终使用了fakeApplication,因为对象也存在于我想要测试的代码中。如果有人有兴趣,它看起来像这样
Map<String, Object> additionalConfiguration = new HashMap<String, Object>();
List<String> additionalPlugins = Arrays.asList("plugins.MongoLogger");
running(Helpers.fakeApplication(additionalConfiguration, additionalPlugins), new Runnable() {
我没有得到NullPointerExceptions,我只是在完成测试后清理我插入的对象。