在执行测试时,我会遍历从控制器到基础的整个流程。我不需要它。是否可以在测试路由时使用 Mockito 或其他类似实用程序来模拟服务?
"respond to the index Action" in new App(applicationWithRouter) {
val Some(result) = route(app, FakeRequest(GET_REQUEST, "/Bob"))
status(result) mustEqual OK
contentType(result) mustEqual Some("text/html")
contentAsString(result) must include("Hello Bob")
}
在路线中,我通过实际服务的应用程序。可以通过实现相同的特征来作弊(通过使用覆盖的服务类实现您的应用程序),仅使用已知的响应。
val application = new GuiceApplicationBuilder()
.overrides(bind[Component].to[MockComponent])
.build()
但是你必须为每个这样的服务编写一个测试实现。但是,采用指标和棘手的 mokat 将不方便。实际上,如何直接锁定对象?你可以像这样模拟 mock[Service],但是如何将它注入到应用程序中呢?
如果应用程序中的组件很少,那么您可以使用任何方便的库(我使用ScalaMock)创建一个模拟组件并按照您编写的方式注入:
如果应用程序中有很多组件,那么我更喜欢在没有帮助的情况下单独测试每个控制器
fakeApplication
: