【问题标题】:Play Framework 2 Java Mock Plugin for Unit Testing用于单元测试的 Play Framework 2 Java Mock 插件
【发布时间】:2015-01-21 14:25:23
【问题描述】:

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

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

插件的类定义是

MongoLogger extends Plugin

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

【问题讨论】:

    标签: java unit-testing playframework playframework-2.2


    【解决方案1】:

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

    public interface Logger {
        // methods
    }
    
    public interface DefaultLogger implements Logger {
    
        private final MongoLogger mongoLogger;
    
        public void error(Object e){
            monoLogger.error(e);
        }
    
    }
    

    在您的生产代码中,无论您调用MongoLogger,请使用Logger 接口。在您的测试代码中,改为注入模拟:

    Mockito.mock(Logger.class);
    

    【讨论】:

    • MongoLogger 不是我可以注入的字段。它是一个播放插件,被导入为import plugins.MongoLogger;,然后它的方法被静态调用MongoLogger.error(e) 我没有机会注入模拟对象,所以我不确定这会起作用
    【解决方案2】:

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

    Map<String, Object> additionalConfiguration = new HashMap<String, Object>();
    List<String> additionalPlugins = Arrays.asList("plugins.MongoLogger");
    running(Helpers.fakeApplication(additionalConfiguration, additionalPlugins), new Runnable() {
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-17
      • 1970-01-01
      • 1970-01-01
      • 2012-12-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多