带间谍的单元测试(交互测试)

经典单元测试测试状态,但是通过状态正确测试行为依赖于其他类的方法是不可能的。我们通过交互测试来测试这些方法,这些测试验证被测系统正确调用其协作者。由于合作者有自己的单元测试,这就足够了,实际上是对测试方法的实际责任的更好测试。我们不测试此方法在给定输入的情况下返回特定结果,而是测试其正确调用其协作者。

// 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