play2框架中单元测试的最佳实践

时间:2013-11-05 09:34:46

标签: unit-testing playframework-2.0

在play2框架中看起来单元测试对我来说非常困难

由于框架自身的风格,许多代码都是静态编写的,并且彼此紧密耦合。

例如,

   boolean isExample = Configuration.root().getBoolean("example.flag");

    ....

   public class Global extends GlobalSettings {
      @Override
      public void onStart(Application app) {
        Akka.system().scheduler().schedule .....
      }
   }

启动Akka调度是针对GlobalSettings的具体类的onStarting方法,并且在FakeApplication启动时将触发它。

Configuration.root()将在不运行FakeApplication的情况下抛出NPE。

一切都以静态的方式进行,没有嘲弄的空间。

您能否推荐任何具有适当测试隔离度的最佳实践?

我是否必须始终使用集成测试? (与DB,Cache,API ......等各种东西建立连接)

1 个答案:

答案 0 :(得分:1)

对我来说这也很难。

值得庆幸的是,播放2.1+假应用比播放2.0更好,我建议你使用FakeApplication。

暂停效果....


如果你真的真的不想运行假应用程序,那就是我做的。

创建“Shadow”配置root,基本上,读取相同的文件。所以基本上:

boolean isExample = Configuration.root().getBoolean("example.flag");

替换为:

boolean isExample = MyConfigurationLoader.getBoolean("example.flag");

其中:

class MyConfigurationLoader {
    public static getBoolean(String key){
        // I use a try catch but maybe better is passing a flag/variable
        // like from the ENV so System.getenv("TEST_MODE").equals("TRUE")
        try {
            return Configuration.root().getBoolean(key);
        } catch (NPE) {
            return alternativeGetBoolean(key);
        }
    }
}

最后,将akka方法分解为更小的方法(无论如何最佳实践)并单独调用它们。