gpt4 book ai didi

NUnit Assert.Equals我缺少什么?

转载 作者:行者123 更新时间:2023-12-04 03:14:09 26 4
gpt4 key购买 nike

Assert.Equals()从不调用

Equals()
operator ==
operator !=

我想念什么吗?我已经实现了IEquatable,但是使用nunit时永远不会调用这些方法。
if (objectA != objectB) Assert.Fail(); //doesnt fail
if (!objectA.Equals(objectB)) Assert.Fail(); //doesnt fail
Assert.AreEqual(objectA, objectB); //fail

更新

我应该更清楚一些。
public class Entity 
{
public int ID { get; set; }
}

var objectA = new Entity() { ID = 1 };
var objectB = new Entity() { ID = 1 };

两个都具有相同ID的单独实例,我已经实现了所有相关方法来使==,!=和Equals正常工作,但是nunit AreSame和AreEqual仍然无法调用这些方法。

最佳答案

你绝对是正确的。
今天早些时候,我一直在与similar problem进行角力,直到找到您的帖子,现在确定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);
}
}

像这样使用它:
Affirm.That(actualObject).IsEqualTo(expectedObject);


Affirm.That(actualObject).IsNotEqualTo(expectedObject);

希望这可以帮助。

关于NUnit Assert.Equals我缺少什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1085278/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com