我必须测试一种计算本地时间和UTC时差的方法。所以我尝试使用填充程序来更改本地时间和UTC,但这不起作用。这是我的单元测试代码:
<TestMethod()> Public Sub CurrentTimeTest()
'Arrange
Dim expected As System.DateTime
expected = New DateTime(2015, 3, 5, 20, 0, 0)
Dim actual As DateTime
actual = DateTime.Now
'Act
Using (ShimsContext.Create())
System.Fakes.ShimDateTime.NowGet = Function() As System.DateTime
Return New DateTime(2015, 3, 5, 20, 0, 0)
End Function
System.Fakes.ShimDateTime.UtcNowGet = Function() As System.DateTime
Return New DateTime(2015, 3, 5, 15, 0, 0)
End Function
End Using
'Assert
Assert.AreEqual(expected, actual)
End Sub
我无法弄清楚为什么DateTime.Now不等于我设置的那个。 任何帮助将不胜感激。提前谢谢。
答案 0 :(得分:1)
您在设置垫片之前调用DateTime.Now
...因此它无法追溯更改actual
的值。我怀疑你是否使用:
Dim actual As DateTime
'Act
Using (ShimsContext.Create())
System.Fakes.ShimDateTime.NowGet = Function() As System.DateTime
Return New DateTime(2015, 3, 5, 20, 0, 0)
End Function
System.Fakes.ShimDateTime.UtcNowGet = Function() As System.DateTime
Return New DateTime(2015, 3, 5, 15, 0, 0)
End Function
actual = DateTime.Now
End Using
'Assert
Assert.AreEqual(expected, actual)
......然后它就会起作用。但正如评论中所指出的,我个人会对待#34;我需要当前时间&#34;作为依赖项,并在接口(IClock
)中表示它。然后,您可以使用不同的生产和测试实现(或者如果您真的需要使用模拟),就像您对任何其他依赖项一样。