【问题标题】: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()));
}