我可以在 mockito 参数中混合一个匹配器和 1 个精确值吗

Can I mix one matcher and 1 exact value in mockito arguments

如果我创建这样的模拟

when(servicesTestEnv.mockUserProfileAndPortfolioTransactionRepository.get(servicesTestEnv.mockDistributedTransaction,ArgumentMatchers.any[ExternalUserProfileKeys]))
        .thenReturn(Right(servicesTestEnv.externalUserProfile))

我收到错误

Invalid use of argument matchers! 2 matchers expected, 1 recorded: -> at UnitSpecs.ServiceSpecs.UserTransactionDatabaseServiceSpecs.$anonfun$new(UserTransactionDatabaseServiceSpecs.scala:170)

但是如果我用值替换两者

when(servicesTestEnv.mockUserProfileAndPortfolioTransactionRepository.get(servicesTestEnv.mockDistributedTransaction,keys))
        .thenReturn(Right(servicesTestEnv.externalUserProfile))

when(servicesTestEnv.mockUserProfileAndPortfolioTransactionRepository.get(ArgumentMatchers.any[DistributedTransaction],ArgumentMatchers.any[ExternalUserProfileKeys]))
        .thenReturn(Right(servicesTestEnv.externalUserProfile))

然后我没有得到错误

这是 Mockito 中的一条规则,即所有参数都需要匹配器或值吗?

Mockito 目前不支持混合匹配器和原始值,并且必须以一种方式(匹配器)或另一种方式(具体值)完全完成模拟,就像您在问题中所展示的那样。

a discussion on Mockito GitHub page 关于混合参数模拟,但它已经死了两年了。