我最近尝试在编写新的NUnit测试时使用Assert.Equals()方法.在执行时,这种方法抛出一个AssertionException说明,
Assert.Equals should not be used for Assertions. 乍一看这有点莫名其妙.这里发生了什么?
我试图断言一个对象与另一个对象"相等".
对象只是具有一堆公共属性的类的实例.是否有一种简单的方法让NUnit基于属性断言相等?
这是我目前的解决方案,但我认为可能有更好的方法:
Assert.AreEqual(LeftObject.Property1, RightObject.Property1)
Assert.AreEqual(LeftObject.Property2, RightObject.Property2)
Assert.AreEqual(LeftObject.Property3, RightObject.Property3)
...
Assert.AreEqual(LeftObject.PropertyN, RightObject.PropertyN)
Run Code Online (Sandbox Code Playgroud)
我想要的是与CollectionEquivalentConstraint一样的精神,其中NUnit验证两个集合的内容是否相同.
今天我遇到了NUnit的以下问题.
我有一个类,派生自泛型类.我开始做一些序列化测试,并使用NUnit的Is.EqualTo()函数测试相等性.
当一个应该失败的测试通过时,我开始怀疑出现了问题.当我使用obj1.Equals(obj2)而不是它应该失败时.
为了调查我创建了以下测试:
namespace NUnit.Tests
{
using Framework;
public class ThatNUnit
{
[Test]
public void IsNotEqualTo_ClientsNotEqual_Passes()
{
var client1 = new DerrivedClient();
var client2 = new DerrivedClient();
client1.Name = "player1";
client1.SomeGenericProperty = client1.Name;
client2.Name = "player2";
client2.SomeGenericProperty = client2.Name;
Assert.That(client1.Equals(client2), Is.False);
Assert.That(client1, Is.Not.EqualTo(client2));
}
[Test]
public void IsNotEqualTo_ClientsAreEqual_AlsoPasses_SomethingWrongHere()
{
var client1 = new DerrivedClient();
var client2 = new DerrivedClient();
client1.Name = "player1";
client1.SomeGenericProperty = client1.Name;
client2.Name = client1.Name;
client2.SomeGenericProperty = client1.Name;
Assert.That(client1.Equals(client2), Is.True);
Assert.That(client1, Is.Not.EqualTo(client2));
}
}
public class …Run Code Online (Sandbox Code Playgroud)