0

我正在为 DateTimeUTC 进行 .NET 5 单元测试。我的以下测试以毫秒为单位失败。我正在初始化expectedDateTimeUtcNow = DateTimeOffset.UtcNow,然后使用expectedDateTimeUtcNow 转换为毫秒作为SUT 来测试我的方法,我通过硬编码的长毫秒值然后测试通过不确定我缺少什么

在这里输入代码

[Fact]
public void ConvertDateTimeToUTC_MustTakeDateTimeParameter_InMilliSecond()
{
        //Arrange
        long startDateTimeUtc = 1626991200000; //2021-07-22 22:00:00
        var expectedDateTime = DateTimeOffset.FromUnixTimeMilliseconds(startDateTimeUtc);

        var expectedDateTimeUtcNow = DateTimeOffset.UtcNow;
        var dateTimeUtcNowMiliSec = expectedDateTimeUtcNow.ToUnixTimeMilliseconds();

        //Act 
        DateTimeOffset utcConvertedDateTime = DateTimeCalculationHelper.ConvertDateTimeToUTC(startDateTimeUtc);
        DateTimeOffset actualDateTimeUtcNow = DateTimeCalculationHelper.ConvertDateTimeToUTC(dateTimeUtcNowMiliSec);


        //Assert
        Assert.Equal(expectedDateTime, utcConvertedDateTime);
        Assert.Equal(expectedDateTimeUtcNow, actualDateTimeUtcNow);
    }

苏特

 public static DateTimeOffset ConvertDateTimeToUTC(long utcDateTimeInMilliSec)
    {
        var dateTimeUtc = DateTimeOffset.FromUnixTimeMilliseconds(utcDateTimeInMilliSec);

        return dateTimeUtc;
    }
4

2 回答 2

2

从根本上说,当您转换为整数毫秒(如您通过调用ToUnixTimeMilliseconds)时,您会丢失任何亚毫秒数据。这应该不足为奇。

目前,您的测试有点像这样:

double original = 5.5;
int integer = (int) original;
double result = (double) integer;
Assert.Equal(original, result);

如果您了解为什么该测试一定会失败,只需将同样的事情应用于您的情况。DateTimeOffset当您转换回...时,您无法“重新获得”丢失的亚毫秒信息。

于 2021-07-27T15:19:33.207 回答
0

另一种但多余的。测试通过。

 Assert.Equal(expectedDateTimeUtcNow.ToUnixTimeMilliseconds(), actualDateTimeUtcNow.ToUnixTimeMilliseconds()); //PASSED

比较时刻度expectedDateTimeUtcNow不同actualDateTimeUtcNow

于 2021-07-27T18:32:45.553 回答