C# 如何编写时间敏感常数的单元测试

C# 如何编写时间敏感常数的单元测试,c#,unit-testing,C#,Unit Testing,这可能是一个显而易见的答案,但我不知道如何最好地为以下内容创建单元测试: Assert.AreEqual(27, AgeCalculator.GetAge(new DateTime(1983, 10, 6))); // this test will fail tomorrow Assert.AreEqual(26, AgeCalculator.GetAge(new DateTime(1984, 11, 14))); Assert.AreEqual(9, AgeCalculator.GetAge(

这可能是一个显而易见的答案,但我不知道如何最好地为以下内容创建单元测试:

Assert.AreEqual(27, AgeCalculator.GetAge(new DateTime(1983, 10, 6))); // this test will fail tomorrow
Assert.AreEqual(26, AgeCalculator.GetAge(new DateTime(1984, 11, 14)));
Assert.AreEqual(9, AgeCalculator.GetAge(new DateTime(2002, 05, 7)));
Assert.AreEqual(7, AgeCalculator.GetAge(new DateTime(2003, 11, 03)));
Assert.AreEqual(4, AgeCalculator.GetAge(new DateTime(2007, 05, 10)));

我已经创建了一个GetAge()方法,以确保将来对该方法的任何更改都是正确的。

查看用于测试非确定性的nice的which部分。

查看用于测试非确定性的nice的which部分。

我将模拟
年龄计算器中的datetime对象,以便始终使用相同的测试日期。

我会模拟
年龄计算器中的datetime对象,以便它始终使用相同的测试日期。

感谢链接-这是一个很棒的系列。我也在寻找“不确定性”这个词,但在发布问题时没有点击:)谢谢againIt,有时候很容易忘记,当你询问当前时间时,你正在创建对系统时钟的隐式依赖。像这篇文章一样,将这些调用封装在自己的时间提供者中,将立即提高单元测试的健壮性。感谢链接-这是一个很棒的系列。我也在寻找“不确定性”这个词,但在发布问题时没有点击:)谢谢againIt,有时候很容易忘记,当你询问当前时间时,你正在创建对系统时钟的隐式依赖。如本文所述,在您自己的时间提供者中封装这些调用将立即提高单元测试的健壮性。