Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 如何验证“发件人”在Mockito中只发送了“两个整数”?_Scala_Mockito_Specs2 - Fatal编程技术网

Scala 如何验证“发件人”在Mockito中只发送了“两个整数”?

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

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 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报告了一个问题: