Play Framework测试和松散耦合

时间:2014-05-12 13:35:14

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

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

按照惯例,有视图,模型和控制器。视图呼叫控制器(通过路由)和控制器呼叫模型。模型由给定查找程序启动的数据库调用填充数据。

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

我考虑过通过ModelProvider访问模型,或者能够在测试中用模拟代替模型。

你怎么看?或者这有点过头了吗?

感谢名单 尼克

1 个答案:

答案 0 :(得分:1)

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

如果用简单的内存数据库替换模型,它仍然被视为单元测试。这也可以帮到你,并且不应该很难设置。

我很难找到的一件事是如何设置不同的conf文件进行测试。这段代码可以解决这个问题。确保你有一个test.conf文件,其中配置了mock in memory数据库。

protected Configuration additionalConfigurations;

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