如何使用Playframework 2.4将服务传递给控制器
我试图在构造函数中传递服务(简单解决方案)
class Application(val service: Service) extends Controller {…}
但是如何使用specs2编写功能测试,更准确地说,如何使用虚假服务实例化控制器:
"…" in new WithApplication {…}
这是错误
[error] 1) Could not find a suitable constructor in controllers.Application. Classes must have either one (and only one) constructor annotated with @Inject or a zero-argument constructor that is not private.
答案 0 :(得分:1)
我会在控制器中注入服务:
import javax.inject._
class Application @Inject (val service: Service) extends Controller {…}
然后根据开发和测试的不同配置将服务绑定到不同的实现。
答案 1 :(得分:0)
我和你一样,正在学习框架的这个方面。我知道您可以使用Mockito(框架中的默认模拟库)创建您的服务模拟并使用它实例化您的控制器。这样的事情:
import org.specs2.mock._
class ApplicationTestSpec extends Specification with Mockito {
lazy val mockService = mock[Service]
// Details of the mock object need to be added.
"..." in new WithApplication {
val mockedController = new controllers.Application(mockRepo)
...
}
}
Mockito的文档应告诉您如何精确模拟您的服务。 我希望它有所帮助。
编辑:的确,这适用于单元测试,而不是功能测试。我的坏。