我已经开始构建一个新的Scala Play!应用程序,我想知道如何测试定义如下的控制器:
class CustomController @Inject()(
cc: SecuredControllerComponents,
clientResourceHandler: CustomResourceHandler
)(implicit ec: ExecutionContext)
extends SecuredController(cc)
我需要模拟 Guice 自动注入的SecuredControllerComponents
。
case class SecuredControllerComponents @Inject()(
adminActionBuilder: AdminActionBuilder,
authenticatedActionBuilder: AuthenticatedActionBuilder,
actionBuilder: DefaultActionBuilder,
parsers: PlayBodyParsers,
messagesApi: MessagesApi,
langs: Langs,
fileMimeTypes: FileMimeTypes,
executionContext: scala.concurrent.ExecutionContext
) extends ControllerComponents
class SecuredController @Inject()(scc: SecuredControllerComponents)
extends AbstractController(scc) {
def AdminAction: AdminActionBuilder = scc.adminActionBuilder
def AuthenticatedAction: AuthenticatedActionBuilder = scc.authenticatedActionBuilder
}
官方 Play 文档建议使用Helpers.stubControllerComponents()
将组件传递给必须测试的控制器。
编辑 - 我想执行的测试
"return a list of Custom Objects as a JSON array" in {
val controller =
new CustomController(Helpers.stubControllerComponents(), resourceHandler)
val result: Future[Result] = controller.index().apply(FakeRequest())
.....
val bodyText: String = contentAsString(result)
bodyText mustBe "ok"
我已经阅读了有关使用 Google Guice 进行测试的指南,但我不知道如何处理我的自定义SecuredComponents
和CustomResourceHandler
。
你能指出我正确的方向吗?有什么好的例子可以看吗?
我当前的配置
- 斯卡拉 v2.12.8
- 玩 2.7.2 斯
- 卡拉·吉斯 4.2.1
- ScalatestPlus-Play 4.0.2
我认为你现在需要做的就是嘲笑你的类,例如使用Mockito:
new CustomController(mySecuredControllerComponentsMock, myCustomResourceHandlerMock)
...
lazy val mySecuredControllerComponentsMock = {
mock(SecuredControllerComponents.class)
...
}