为什么 NUnit Framework 会抛出 DateTime AssertionException?

Why is NUnit Framework throwing DateTime AssertionException?

我正在尝试格式化 DateTime,但不会将 属性 更改为 string 的类型。

我的属性如下DateTime DateApplicationReceived = FormatDateTime();

我做了一个小函数来这样做,它允许我将我的 string 解析为一种 DateTime

private static DateTime FormatDateTime()
{
    var format = DateTime.UtcNow.ToString("G");

    var dateTime = DateTime.Parse(format);
    return dateTime;
}

假设现在的日期和时间是:16/01/2019 15:30:00。我使用 NUnit 通过执行以下断言来测试我的函数是否有效:

public void ConvertsTime()
{
    var sut = DateApplicationReceived;

    Assert.That(sut, Is.EqualTo("16/01/2019 15:30:00"));
}

我的测试失败了。预期结果忽略格式("G")并将其显示为不同的文化 2019-01/16

调试信息:

为什么要这样做?我明确地给它一个格式并改变文化变体 似乎 没有任何效果。

DateTime 对象没有格式。

所以你这里的代码没用:

var format = DateTime.UtcNow.ToString("G");
var dateTime = DateTime.Parse(format);

这完全等同于

var dateTime = DateTime.UtcNow;

在单元测试中,您应该将 DateTimeDateTime 进行比较,或者将 stringstring 进行比较。目前,您正在比较 DateTimestring.

因此您应该将代码更改为:

Assert.That(sut.ToString("G"), Is.EqualTo("16/01/2019 15:30:00"));

Assert.That(sut, Is.EqualTo(DateTime.Parse("16/01/2019 15:30:00")));