如何使用 Guice 和模拟自定义控制器组件测试 Play 应用程序



我已经开始构建一个新的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 进行测试的指南,但我不知道如何处理我的自定义SecuredComponentsCustomResourceHandler

你能指出我正确的方向吗?有什么好的例子可以看吗?

我当前的配置

  • 斯卡拉 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)
...
}

最新更新