我已经开始构建新的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()
将组件传递到必须进行测试的Controller。
"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"
我已经完成this guide的有关使用Google Guice进行测试的工作,但是我不知道如何处理自定义SecuredComponents
和CustomResourceHandler
。
能否请您指出正确的方向?有没有很好的例子值得关注?
我当前的配置
答案 0 :(得分:0)
我认为您现在需要做的就是模拟您的类,例如使用 Mockito :
new CustomController(mySecuredControllerComponentsMock, myCustomResourceHandlerMock)
...
lazy val mySecuredControllerComponentsMock = {
mock(SecuredControllerComponents.class)
...
}