如何使用Playframework 2.4将服务传递给控制器

时间:2015-11-19 12:31:24

标签: scala playframework

如何使用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.

2 个答案:

答案 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的文档应告诉您如何精确模拟您的服务。 我希望它有所帮助。

编辑:的确,这适用于单元测试,而不是功能测试。我的坏。