Play Framework 2用于单元测试的Java Mock插件

时间:2015-01-21 14:25:23

标签: java unit-testing playframework playframework-2.2

我正在尝试为Play Framework 2.2编写单元测试。我尝试测试的课程会调用Play插件,例如

Exception e = new Exception();
MongoLogger.error(e);

插件的类定义是

MongoLogger extends Plugin

我如何使用Mockito模拟这个类并注册它。我想避免使用FakeApplication进行单元测试。任何帮助,将不胜感激。

2 个答案:

答案 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,我只是在完成测试后清理我插入的对象。