Assert.Equals()从不调用
Equals()
operator ==
operator !=
Run Code Online (Sandbox Code Playgroud)
我错过了什么吗?我已经实现了IEquatable但是在使用nunit时仍然没有调用这些方法.
if (objectA != objectB) Assert.Fail(); //doesnt fail
if (!objectA.Equals(objectB)) Assert.Fail(); //doesnt fail
Assert.AreEqual(objectA, objectB); //fail
Run Code Online (Sandbox Code Playgroud)
UPDATE
我应该更清楚.
public class Entity
{
public int ID { get; set; }
}
var objectA = new Entity() { ID = 1 };
var objectB = new Entity() { ID = 1 };
Run Code Online (Sandbox Code Playgroud)
两者使用相同的ID我已经实现了所有的相关方法两个独立的情况下,使这项工作的==,!=和equals但NUnit的AreSame和AreEqual仍无法调用这些方法.
使用Assert.AreEqual(a, b)值类型,Assert.AreSame(a, b)引用类型. http://www.nunit.org/index.php?p=identityAsserts&r=2.2.7
你绝对是对的。今天早些时候,我一直在努力解决类似的问题,直到我找到您的帖子,现在我确信 NUnit IsEqualTo() 并不总是调用所提供的 Equals 覆盖。
我说始终如一,因为有时确实如此。事实上我有两节课。第二个是从第一个衍生出来的。当我在第一个实例上调用 Is.EqualTo() 时,NUnit 会调用 Equals 覆盖,而对于第二个实例则不会。
虽然这很奇怪,但我没有时间进一步调查到底发生了什么。
有类似问题或解决方案的人绝对应该发布它,因为这是一件非常烦人的事情,实际上让我怀疑我的测试的有效性。
与此同时,我创建了以下 Affirm 类,它肯定会调用 Equals 覆盖(我检查过)。它使用 NUnit 来执行简单的相等断言,而不是 Is.EqualTo(),并在一定程度上弥补了这样的事实:这样,在测试失败的情况下,NUnit 不会给出对象的字符串表示形式。
所以这里是:
using NUnit.Framework;
public static class Affirm
{
public static Affirmer That(object actual)
{
return new Affirmer(actual);
}
}
[EditorBrowsable(EditorBrowsableState.Never)]
public class Affirmer
{
readonly object _actual;
public Affirmer(object actual)
{
_actual = actual;
}
public void IsEqualTo(object expected)
{
string failureMessage = string.Format("\nExpected: <{0}>\nBut was: <{1}>", _actual, expected);
Assert.That(_actual.Equals(expected), Is.True, failureMessage);
}
public void IsNotEqualTo(object expected)
{
string failureMessage = string.Format("\nDid not excpect: <{0}>\nBut was: <{1}>", _actual, expected);
Assert.That(_actual.Equals(expected), Is.False, failureMessage);
}
}
Run Code Online (Sandbox Code Playgroud)
像这样使用它:
Affirm.That(actualObject).IsEqualTo(expectedObject);
Run Code Online (Sandbox Code Playgroud)
和
Affirm.That(actualObject).IsNotEqualTo(expectedObject);
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助。
| 归档时间: |
|
| 查看次数: |
10584 次 |
| 最近记录: |