您好,我正在开发Play 2应用。
按照惯例,有视图,模型和控制器。视图呼叫控制器(通过路由)和控制器呼叫模型。模型由给定查找程序启动的数据库调用填充数据。
好吧,现在我创建了我的第一个控制器测试。我想测试的控制器方法是一个调用用户模型本身的方法(User user = User.findByName(" someName");)。所以这意味着这个方法与这个模型类耦合。要测试此方法,我必须使用testdata设置内存数据库,该数据库在测试期间由用户模型的查找程序调用。但这使我的单元测试进行了集成测试。因为每个控制器方法都是静态的,所以我无法注入模型的模拟。这是Play推荐的正确方法吗?或者有没有办法在测试过程中用模拟代替模型。
我考虑过通过ModelProvider访问模型,或者能够在测试中用模拟代替模型。
你怎么看?或者这有点过头了吗?感谢名单 尼克
答案 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()));
}