具有存根依赖性的单元测试

好的单元测试是独立的,但代码通常具有依赖性。我们使用各种测试双精度来删除测试的依赖性。最简单的测试双打之一是存根。这是一个带有硬编码返回值的函数,代替现实世界的依赖。

// 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(),但这会导致不一致和不可靠的测试。所以在这里我们将其删除。