Scala 如何验证“发件人”在Mockito中只发送了“两个整数”?
Scala代码:Scala 如何验证“发件人”在Mockito中只发送了“两个整数”?,scala,mockito,specs2,Scala,Mockito,Specs2,Scala代码: class Sender { def send(objects: Any): Unit = () } class User(sender: Sender) { def hello(): Unit = { sender.send("hello") sender.send(1) sender.send(2) } } 我只想测试它是否发送正确的int,而不关心字符串: "user" should { "send 3 objects, but
class Sender {
def send(objects: Any): Unit = ()
}
class User(sender: Sender) {
def hello(): Unit = {
sender.send("hello")
sender.send(1)
sender.send(2)
}
}
我只想测试它是否发送正确的int,而不关心字符串:
"user" should {
"send 3 objects, but two ints only" in {
val sender = mock[Sender]
val user = new User(sender)
user.hello()
there was two(sender).send(any[Int]) // !!! failed
there was one(sender).send(1)
there was one(sender).send(2)
}
}
它失败,并显示以下消息:
The mock was not called as expected:
sender.send(<any>);
Wanted 2 times:
-> at com.mytest.UserSpec$$anonfun$13$$anonfun$apply$10$$anonfun$apply$1.apply$mcV$sp(UserSpec.scala:50)
But was 3 times. Undesired invocation:
-> at com.mytest.UserSpec$User.hello(UserSpec.scala:63)
java.lang.Exception: The mock was not called as expected:
sender.send(<any>);
Wanted 2 times:
-> at com.mytest.UserSpec$$anonfun$13$$anonfun$apply$10$$anonfun$apply$1.apply$mcV$sp(UserSpec.scala:50)
But was 3 times. Undesired invocation:
-> at com.mytest.UserSpec$User.hello(UserSpec.scala:63)
at com.mytest.UserSpec$$anonfun$13$$anonfun$apply$10.apply(UserSpec.scala:50)
at com.mytest.UserSpec$$anonfun$13$$anonfun$apply$10.apply(UserSpec.scala:46)
未按预期调用模拟:
sender.send();
通缉2次:
->在com.mytest.UserSpec$$anonfun$13$$anonfun$apply$10$$anonfun$apply$1.apply$mcV$sp(UserSpec.scala:50)
但是是三次。意外调用:
->在com.mytest.UserSpec$User.hello(UserSpec.scala:63)
java.lang.Exception:未按预期调用模拟:
sender.send();
通缉2次:
->在com.mytest.UserSpec$$anonfun$13$$anonfun$apply$10$$anonfun$apply$1.apply$mcV$sp(UserSpec.scala:50)
但是是三次。意外调用:
->在com.mytest.UserSpec$User.hello(UserSpec.scala:63)
在com.mytest.UserSpec$$anonfun$13$$anonfun$apply$10.apply(UserSpec.scala:50)
在com.mytest.UserSpec$$anonfun$13$$anonfun$apply$10.apply(UserSpec.scala:46)
如何以正确的方式编写它?您可以使用
haveClass
获得正确的匹配
there was two(sender).send(haveClass[Integer])
你能验证一下答案是否正确吗?谢谢@Eric,很抱歉这么晚才发表评论。我测试了它,从SBT命令行中发现它还可以,但在IDEA中失败了。我还向IDEA报告了一个问题: