帶間諜的單元測試(互動測試)

經典單元測試測試狀態,但是通過狀態正確測試行為依賴於其他類的方法是不可能的。我們通過互動測試來測試這些方法,這些測試驗證被測系統正確呼叫其協作者。由於合作者有自己的單元測試,這就足夠了,實際上是對測試方法的實際責任的更好測試。我們不測試此方法在給定輸入的情況下返回特定結果,而是測試其正確呼叫其協作者。

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