【问题标题】:NUnit unit test fails with correct expected resultNUnit 单元测试失败,预期结果正确
【发布时间】:2016-08-11 01:30:24
【问题描述】:

运行 NUnit 单元测试时,我收到以下输出:
Message: Expected: <Data.Models.Address>
But was: <Data.Models.Address>

如下图所示

我在 .NET 3.5 下运行应用程序并使用 NUnit 2.6.3,因为我相信这是我可以与 .NET 3.5 一起使用的最新版本。是否有任何理由导致单元测试以这种方式失败?有没有办法解决这个问题,还是我只是被吓到了?

【问题讨论】:

  • 如果您在不显示测试和这些类是什么的情况下显示输出,没有人可以提供帮助。这有点像说你有一个计算器但它不工作,因为它说答案是 5。不知道输入是什么,我们就无法知道正确的输出应该是什么。
  • 仅供大家参考;您需要在您的测试所针对的类中覆盖 Equals 运算符。我的简单实现是public override bool Equals(object obj) { return obj.GetType() == GetType(); }

标签: c# unit-testing nunit


【解决方案1】:

我通常得到这种类型的错误不是因为 NUnit 的任何奇怪之处,而是因为您正在检查不是相同引用的对象。如果您粘贴您的测试会对正在发生的事情有更好的了解,但在我看来,如果您在对象上断言您会修复它,例如,如果这是您的情况,您会从模拟中返回。例如:

[Test]
public void MyTest()
{
    //Arrange
    const string id = "the id"
    var address = new Address{Id = id};
    var repository = new Mock<IRepository>(); //Using Moq here
    repository.Setup(r => r.Get(id))
              .Returns(address);
    var sut = new AddressManager(repository.Object);

    //Act
    var returnedAddress = sut.GetAddress(id);

    //Assert
    repository.VerifyAll(); //Checks you're calling the repository with the "id"
    Assert.That(returnedAddress, Is.EqualTo(address)); // This will pass because the reference is the same
}

这就是我通常执行 Equals 的方式,除非我想测试地址的特定属性值,但是这种类型的测试可以在诸如映射器或类似的类中找到。顺便说一句,我从来没有覆盖 Equals。

希望它确实有意义。

【讨论】:

  • 这真的很棒,感谢您抽出宝贵的时间。不幸的是我无法修改测试用例,所以添加Is.EqualTo(object) 不是一个选项。 :/这太棒了,我会把它收藏起来。 :D
【解决方案2】:

Override Equals 用 NUnit AreEqual(obj a, obj b) 解决了这个问题

public override bool Equals(object obj)
{
    return obj.GetType() == GetType();
}

当然,您需要检查所有数据以确保 Obj_A 实际上等于 Obj_B。

【讨论】:

  • 这可能是因为您正在执行 Assert.AreEqual(ExpectedAddress, ActualAddress); 之类的操作。您也可以只检查相关属性: Assert.AreEqual(ExpectedAddress.Name, ActualAddress.Name) 等(如果您不需要检查太多,太频繁 - 否则 Equals 覆盖显然是要走的路)
  • 与往常一样,它依赖于上下文,但是当相等性只检查类型时测试 a.Equals(b) 对我来说听起来像是一个奇怪的相等性 + 测试用例实现。所以这个测试唯一相关的事情是验证是否有任何地址被返回?例如,您不在乎它是否是正确的地址?
  • 对。我知道我可以轻松检查所有属性,但我只想确保类型正确返回。另外,当我弄清楚这一点时,我已经准备好翻转我的桌子了,所以我只需要一个基本的实现来展示我已经启动并运行了应用程序。
猜你喜欢
  • 1970-01-01
  • 2010-09-21
  • 1970-01-01
  • 2021-07-17
  • 1970-01-01
  • 2017-12-20
  • 1970-01-01
  • 2015-11-19
  • 1970-01-01
相关资源
最近更新 更多