NUnit单元测试失败,并且具有正确的预期结果

时间:2016-08-11 01:30:24

标签: c# unit-testing nunit

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

如下图所示<{3}}

我在.NET 3.5下运行应用程序并使用NUnit 2.6.3,因为我相信这是我可以在.NET 3.5中使用的最新版本。是否有任何理由单元测试会以这种方式失败?有没有办法解决这个问题,还是我刚刚结账?

2 个答案:

答案 0 :(得分: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,但是这种类型的测试可以在像mappers或类似的类中找到。我从未覆盖过Equals btw。

希望它确实有意义。

答案 1 :(得分:-1)

Override Equals解决了NUnit AreEqual(obj a,obj b)

的挫败感
public override bool Equals(object obj)
{
    return obj.GetType() == GetType();
}

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