簡體   English   中英

.Net單元測試UTC與本地時差

[英].Net Unit Testing the UTC and local time difference

我正在嘗試對以下方法進行單元測試:

Public Shared Function GetLocalTimeWithTimeDifferenceUTC(startTime As DateTime) As String
    Dim localTime As String = ""
    Dim timeUTC As DateTime = startTime.ToUniversalTime()
    Dim timeDiff As TimeSpan = startTime.Subtract(timeUTC)
    Dim sSign As String = "+"
    If timeDiff.TotalMinutes < 0 Then
        sSign = "-"
        timeDiff = timeDiff.Negate
    End If
    Dim offsetUTC As String = sSign & String.Format("{0:d2}:{1:d2}", timeDiff.Hours, timeDiff.Minutes)
    localTime = startTime.ToString("yyyy-MM-ddTHH:mm:ss") & offsetUTC

    Return localTime
End Function

它返回(例如startTime = 2015,3,18,10,0,0時差為兩個小時之和)2015-03-18T10:00:00 + 02:00。

這是我的單元測試:

Public Sub GetLocalTimeWithTimeDifferenceUTC_Test()
        Dim expected As String
        Dim actual As String
        Dim param As New System.DateTime(2015, 3, 5, 10, 0, 0)
        expected = "2015-03-05T10:00:00+03:00"
        Using (ShimsContext.Create())
            System.Fakes.ShimDateTime.NowGet = Function() As System.DateTime
                                                   Return New DateTime(2015, 3, 5, 10, 0, 0)
                                               End Function
            System.Fakes.ShimDateTime.UtcNowGet = Function() As System.DateTime
                                                      Return New DateTime(2015, 3, 5, 7, 0, 0)
                                                  End Function
            actual = StringFunctions.GetLocalTimeWithTimeDifferenceUTC(param)
        End Using
        Assert.AreEqual(expected, actual)
    End Sub

我應用於DateTime.Now和DateTime.UtcNow的更改不起作用,測試失敗。 當我嘗試使用本地時間時,它可以工作。 是否可能由函數ToUniversalTime()引起? 我應該改變自己的方法嗎? 任何幫助將不勝感激。 提前致謝。

您必須像這樣提供本地和UTC DateTimeKind

Public Sub GetLocalTimeWithTimeDifferenceUTC_Test()
    Dim expected As String
    Dim actual As String
    Dim param As New System.DateTime(2015, 3, 5, 10, 0, 0)
    expected = "2015-03-05T10:00:00+03:00"
    Using (ShimsContext.Create())
        System.Fakes.ShimDateTime.NowGet = Function() As System.DateTime
                                               Return New DateTime(2015, 3, 5, 10, 0, 0, DateTimeKind.Local)
                                           End Function
        System.Fakes.ShimDateTime.UtcNowGet = Function() As System.DateTime
                                                  Return New DateTime(2015, 3, 5, 7, 0, 0, DateTimeKind.Utc)
                                              End Function
        actual = StringFunctions.GetLocalStartTime(param)
    End Using
    Assert.AreEqual(expected, actual)
End Sub

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM