运行NUnit单元测试时,我收到以下输出:
Message: Expected: <Data.Models.Address>
But was: <Data.Models.Address>
如下图所示<{3}}
我在.NET 3.5下运行应用程序并使用NUnit 2.6.3,因为我相信这是我可以在.NET 3.5中使用的最新版本。是否有任何理由单元测试会以这种方式失败?有没有办法解决这个问题,还是我刚刚结账?
答案 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。