检查模拟对象的方法接收的内容

时间:2017-04-29 19:16:26

标签: scala mockito

在我的项目中,每当一个类产生一些输出时,它不会执行println,而是调用OutputStore.write,这是我定义的类和方法。

我正在尝试测试另一个类的输出,所以我嘲笑OutputStore。我希望看到它收到的OutputStore.write参数。

val mockOutputStore = mock[OutputStore]

我想做这样的事情:

val argument = ArgumentCaptor.forClass(classOf[OutputStore])
verify(mockOutputStore).write(argument.capture())
assertEquals("some parameter", argument.getValue())

但是,由于verify甚至无法识别,因此无法编译。

我的测试类的签名是这样的:

class SomeUnitTestSet extends org.scalatest.FunSuite with MockitoSugar with PropertyChecks

知道如何检查模拟对象的方法接收的参数吗?

1 个答案:

答案 0 :(得分:2)

以下是@JBNizet建议的Scala代码

的翻译

假设你有OutputStore课程

class OutputStore {
  def write(msg: String) = {
    println(msg)
  }
}

和一些OutputStoreApiUser

class OutputStoreApiUser(val outputStore: OutputStore) {
  def foo(): Unit = {
    outputStore.write("some parameter")
    outputStore.write("some parameter2")
  }
}

然后你的测试可能是这样的(在现实生活中你可能@Inject outputStore但这里没有关系):

import org.mockito.Mockito.verify // static import!
import org.scalatest.mockito.MockitoSugar
import org.scalatest.prop.PropertyChecks

class SomeUnitTestSet extends org.scalatest.FunSuite with MockitoSugar with PropertyChecks {

  test("Capture calls"){
    val mockOutputStore = mock[OutputStore]
    val apiUser = new OutputStoreApiUser(mockOutputStore)
    apiUser.foo()
    verify(mockOutputStore).write("some parameter")
    verify(mockOutputStore).write("some parameter2")
  }

}

这个按照我的预期编译并为我工作