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

Unit testing play2框架中单元测试的最佳实践,unit-testing,playframework-2.0,Unit Testing,Playframework 2.0,看起来play2框架中的单元测试对我来说相当困难 由于框架本身的风格,许多代码都是静态编写的,并且彼此紧密耦合 比如说, boolean isExample = Configuration.root().getBoolean("example.flag"); .... public class Global extends GlobalSettings { @Override public void onStart(Application app)

看起来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类上启动的方法,它将在FakeApplication启动时启动

root()将抛出NPE而不在FakeApplication上运行

一切都是静态的,没有嘲笑的余地

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


我是否必须始终使用集成测试?(连接各种各样的东西,比如数据库、缓存、API等等)

这对我来说也是相当困难的

谢天谢地,Play2.1+fakeapplication比Play2.0好得多,我建议您使用fakeapplication

暂停生效


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

创建一个“影子”配置根,基本上读取相同的文件。所以基本上:

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方法分解为更小的方法(无论如何都是最佳实践),并分别调用它们