的编译并为我工作
在我的项目中,每当类产生一些输出时,而不是这样做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")
}
}
这是我期望的