具有存根依赖性的单元测试
好的单元测试是独立的,但代码通常具有依赖性。我们使用各种测试双精度来删除测试的依赖性。最简单的测试双打之一是存根。这是一个带有硬编码返回值的函数,代替现实世界的依赖。
// Test that oneDayFromNow returns a value 24*60*60 seconds later than current time
let systemUnderTest = new FortuneTeller() // Arrange - setup environment
systemUnderTest.setNow(() => {return 10000}) // inject a stub which will
// return 10000 as the result
let actual = systemUnderTest.oneDayFromNow() // Act - Call system under test
assert.equals(actual, 10000 + 24 * 60 * 60) // Assert - Validate expected result
在生产代码中,oneDayFromNow
会调用 Date.now()
,但这会导致不一致和不可靠的测试。所以在这里我们将其删除。