Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于单元测试的Play Framework 2 Java模拟插件_Java_Unit Testing_Playframework_Playframework 2.2 - Fatal编程技术网

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

用于单元测试的Play Framework 2 Java模拟插件,java,unit-testing,playframework,playframework-2.2,Java,Unit Testing,Playframework,Playframework 2.2,我正在尝试为Play Framework 2.2编写一个单元测试。我尝试测试的类调用一个Play插件,例如 Exception e = new Exception(); MongoLogger.error(e); 插件的类定义是 MongoLogger extends Plugin 如何使用Mockito来模拟这个类并注册它。我希望避免在单元测试中使用伪造的应用程序。任何帮助都将不胜感激 使用包装器设计模式将对MongoLogger的调用封装到接口: public interface Log

我正在尝试为Play Framework 2.2编写一个单元测试。我尝试测试的类调用一个Play插件,例如

Exception e = new Exception();
MongoLogger.error(e);
插件的类定义是

MongoLogger extends Plugin

如何使用Mockito来模拟这个类并注册它。我希望避免在单元测试中使用伪造的应用程序。任何帮助都将不胜感激

使用包装器设计模式将对
MongoLogger
的调用封装到接口:

public interface Logger {
    // methods
}

public interface DefaultLogger implements Logger {

    private final MongoLogger mongoLogger;

    public void error(Object e){
        monoLogger.error(e);
    }

}
在生产代码中,无论您在哪里调用
mongogger
,都可以使用
Logger
接口。在测试代码中,插入模拟:

Mockito.mock(Logger.class);

我最终使用了fakeApplication,因为对象也被持久化在我要测试的代码中。如果有人感兴趣,它看起来像这样

Map<String, Object> additionalConfiguration = new HashMap<String, Object>();
List<String> additionalPlugins = Arrays.asList("plugins.MongoLogger");
running(Helpers.fakeApplication(additionalConfiguration, additionalPlugins), new Runnable() {
Map additionalConfiguration=newhashmap();
List additionalPlugins=Arrays.asList(“plugins.mongogger”);
正在运行(Helpers.fakeApplication(additionalConfiguration,additionalPlugins),新的Runnable(){

我没有收到NullPointerException,我只是在完成测试后清理插入的对象。

MongoLogger不是我可以注入的字段。它是一个play插件,作为
import plugins.MongoLogger;
导入,然后静态调用它的方法
MongoLogger.error(e)
我没有机会注入模拟对象,因此我不确定这是否可行