检查模拟对象的方法收到的方法



在我的项目中,每当类产生一些输出时,而不是这样做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

任何想法如何检查模拟对象的方法接收的参数?

这是@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")
  }
}

这是我期望的

的编译并为我工作

相关内容

  • 没有找到相关文章

最新更新