在我的项目中,每当一个类产生一些输出时,它不会执行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
知道如何检查模拟对象的方法接收的参数吗?
答案 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")
}
}
这个按照我的预期编译并为我工作