如何修复未指定隐式arg的scala模拟错误?

时间:2019-05-19 21:44:02

标签: scala scalamock

我有一个要通过scala模拟进行模拟的类,但是却遇到编译错误。如何纠正此错误或正确指定隐式?

它表示未指定隐式arg。

我尝试遵循scala模拟站点上的指南。我还尝试了不同的方式来指定隐式值。

我在这里创建模拟

val mockUserSessionApiGatewayHandler = mock[UserSessionApiGatewayHandler]

这是方法签名

def userExists[F[+_] : Monad](request: UserNameAndPasswordEvent)(implicit awsProxy: DatabaseProxy[F, UserTable])

我在这里指定了模拟

(mockUserSessionApiGatewayHandler.userExists[IO] (_: UserNameAndPasswordEvent) ( _: DatabaseProxy[IO, UserTable]) )
            .expects(testUserNameAndPasswordEvent, *)
            .returning(EitherT.rightT[IO, String]("User Does Not Exist"))

这是错误

not enough arguments for method userExists: (implicit evidence$3: cats.Monad[cats.effect.IO], implicit awsProxy: lambdas.database.DatabaseProxy[cats.effect.IO,lambdas.database.UserTable])cats.data.EitherT[cats.effect.IO,String,String].
[error] Unspecified value parameter awsProxy.
[error]           (mockUserSessionApiGatewayHandler.userExists[IO] (_: UserNameAndPasswordEvent) ( _: DatabaseProxy[IO, UserTable]) )
[error]                                                                                          ^
[error] one error found

1 个答案:

答案 0 :(得分:1)

事实证明,泛型类型是隐式的,因此我需要添加它。

(mockUserSessionApiGatewayHandler.userExists[IO] 
(_: UserNameAndPasswordEvent) (_:IO , _: DatabaseProxy[IO, UserTable]) )
.expects(testUserNameAndPasswordEvent, *, *)