MatchersException 尽管在测试 [Scala] 中使用了 any() 和 eq()
MatchersException despite using any() and eq() in Test [Scala]
我有一个具有以下签名的方法:
def fetchCode[T](
seconds: Int,
client: String,
scope: String,
data: T,
retryLimit: Int = 10
)(implicit formats: Formats): String
在我的测试中,我试图将其模拟为:
val accessCode: String = "CODE"
when(
mockService
.fetchCode[String](
any[Int],
any[String],
Matchers.eq(partner.name),
any[String],
any[Int]
)
).thenReturn(accessCode)
verify(mockService).fetchCode(
Matchers.any(),
Matchers.any(),
Matchers.eq(partner.name),
Matchers.any(),
Matchers.any()
)
经过运行这个测试,我仍然看到以下错误:
Invalid use of argument matchers!
6 matchers expected, 5 recorded:
This exception may occur if matchers are combined with raw values:
//incorrect:
someMethod(anyObject(), "raw String");
When using matchers, all arguments have to be provided by matchers.
For example:
//correct:
someMethod(anyObject(), eq("String by matcher"));
For more info see javadoc for Matchers class.
我不明白为什么会出现此错误 - 我只需要 5 个匹配器 - 每个参数一个,为什么需要 6 个?
implicit formats: Formats
也作为参数传递,因此 mockito 需要能够匹配它。
正如@Levi 在他的回答中提到的,您需要解决该方法获得的所有参数,以便使用模拟。正如您在错误消息中看到的那样:
6 matchers expected, 5 recorded
您需要做的是在新括号中添加 any[Formats]
(与您原来的方法完全一样),并提供它们的模拟值:
when(
mockService
.fetchCode[String](
any[Int],
any[String],
Matchers.eq(partner.name),
any[String],
any[Int]
)(any[Formats])
).thenReturn(accessCode)
verify(mockService).fetchCode(
Matchers.any(),
Matchers.any(),
Matchers.eq(partner.name),
Matchers.any(),
Matchers.any()
)(any[Formats])
我有一个具有以下签名的方法:
def fetchCode[T](
seconds: Int,
client: String,
scope: String,
data: T,
retryLimit: Int = 10
)(implicit formats: Formats): String
在我的测试中,我试图将其模拟为:
val accessCode: String = "CODE"
when(
mockService
.fetchCode[String](
any[Int],
any[String],
Matchers.eq(partner.name),
any[String],
any[Int]
)
).thenReturn(accessCode)
verify(mockService).fetchCode(
Matchers.any(),
Matchers.any(),
Matchers.eq(partner.name),
Matchers.any(),
Matchers.any()
)
经过运行这个测试,我仍然看到以下错误:
Invalid use of argument matchers!
6 matchers expected, 5 recorded:
This exception may occur if matchers are combined with raw values:
//incorrect:
someMethod(anyObject(), "raw String");
When using matchers, all arguments have to be provided by matchers.
For example:
//correct:
someMethod(anyObject(), eq("String by matcher"));
For more info see javadoc for Matchers class.
我不明白为什么会出现此错误 - 我只需要 5 个匹配器 - 每个参数一个,为什么需要 6 个?
implicit formats: Formats
也作为参数传递,因此 mockito 需要能够匹配它。
正如@Levi 在他的回答中提到的,您需要解决该方法获得的所有参数,以便使用模拟。正如您在错误消息中看到的那样:
6 matchers expected, 5 recorded
您需要做的是在新括号中添加 any[Formats]
(与您原来的方法完全一样),并提供它们的模拟值:
when(
mockService
.fetchCode[String](
any[Int],
any[String],
Matchers.eq(partner.name),
any[String],
any[Int]
)(any[Formats])
).thenReturn(accessCode)
verify(mockService).fetchCode(
Matchers.any(),
Matchers.any(),
Matchers.eq(partner.name),
Matchers.any(),
Matchers.any()
)(any[Formats])