带间谍的单元测试(交互测试)
经典单元测试测试状态,但是通过状态正确测试行为依赖于其他类的方法是不可能的。我们通过交互测试来测试这些方法,这些测试验证被测系统正确调用其协作者。由于合作者有自己的单元测试,这就足够了,实际上是对测试方法的实际责任的更好测试。我们不测试此方法在给定输入的情况下返回特定结果,而是测试其正确调用其协作者。
// Test that squareOfDouble invokes square() with the doubled value
let systemUnderTest = new Calculator() // Arrange - setup environment
let square = spy()
systemUnderTest.setSquare(square) // inject a spy
let actual = systemUnderTest.squareOfDouble(3) // Act - Call system under test
assert(square.calledWith(6)) // Assert - Validate expected interaction