【问题标题】:Play Framework testing and loose couplingPlay 框架测试和松耦合
【发布时间】:2014-05-12 13:35:13
【问题描述】:

您好,我正在开发 Play 2 应用。

按照惯例,有视图、模型和控制器。视图调用控制器(通过路由)和控制器调用模型。模型由给定查找器发起的数据库调用填充数据。

好吧,现在我创建了我的第一个控制器测试。我要测试的控制器方法是调用用户模型本身的方法(User user = User.findByName("someName");)。所以这意味着这个方法耦合到这个模型类。为了测试这种方法,我必须使用 testdata 建立一个内存数据库,该数据库在测试期间由用户模型的查找器调用。但这使我的单元测试成为集成测试。因为每个控制器方法都是静态的,所以我不能注入模型的模拟。这是 Play 推荐的正确方式吗?或者有没有办法在测试期间用模拟替换模型。

我考虑过通过 ModelProvider 访问模型,或者这样可以通过测试中的模拟替换模型。

你怎么看?或者这是矫枉过正?

谢谢 尼克

【问题讨论】:

    标签: unit-testing playframework-2.0 loose-coupling


    【解决方案1】:

    我也觉得这很困难。我最终做的是使用工厂来获取模型类,并注入一个模拟类而不是原始类。

    如果您将模型替换为简单的内存数据库,它仍被视为单元测试。这也可以为您解决问题,并且设置起来应该不会很困难。

    我很难找到的一件事是如何设置不同的 conf 文件进行测试。这段代码 sn-p 可以解决问题。确保您有一个 test.conf 文件,其中配置了内存数据库中的模拟。

    protected Configuration additionalConfigurations;
    
    protected AbstractTest()
    {
        Config additionalConfig = ConfigFactory.parseFile(new File("conf/test.conf"));
        additionalConfigurations = new Configuration(additionalConfig);
        start(fakeApplication(additionalConfigurations.asMap(),fakeGlobal()));
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-05-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-19
      • 1970-01-01
      相关资源
      最近更新 更多