在下面,我使用版本0.11.0.play24(https://github.com/ReactiveMongo/Play-ReactiveMongo)中的Play2 ReactiveMongo插件 对于Play 2.4。
如位于http://reactivemongo.org/releases/0.11/documentation/tutorial/play2.html的文档中所述,带有Mongo的Play2控制器实例化如下:
class MyController @Inject() (val reactiveMongoApi: ReactiveMongoApi)
extends Controller with MongoController with ReactiveMongoComponents { }
因此,由于控制器现在是一个类而不是一个对象,因此在测试用例中不可能将它用作单例。
但是,我不知道如何注入reactiveMongoApi以便在测试用例(ScalaCheck或其他......)中使用正确的参数实例化MyController()
您对如何使用ScalaCheck或Specs2测试此类控制器有任何想法/示例吗?
提前谢谢!
答案 0 :(得分:2)
您可以为ReactiveMongoApi
生成模拟(取决于您使用的模拟框架):
val reactiveMongoApi = mock[ReactiveMongoApi]
然后你可以这样做:
new MyController(reactiveMongoApi)
这是最简单的方法。要使用实际的ReactiveMongoApi
对象:
val app = new GuiceApplicationBuilder()
.in(Mode.Test)
.configure("play.modules.enabled" -> "play.modules.reactivemongo.ReactiveMongoModule")
.build
val reactiveMongoApi = app.injector.instanceOf[ReactiveMongoApi]
如果它变得更复杂,例如,部分模拟的嵌套依赖树(这是比单元测试更多的集成测试),您可能希望部分模仿Guice框架,如解释here。
答案 1 :(得分:0)
该项目使用Guice进行依赖注入,使用Spec2进行控制器测试,使用Frisby进行端点测试。