c# - Func NUnit 相等比较

标签 c# nunit equality func

Func 的相等性比较如何工作?我已将我的问题的复杂性降低到这些单元测试:

[Test]
public void Will_Pass()
{
    Func<string> func = () => "key";
    Assert.That(func, Is.EqualTo(func));
}

[Test]
public void Will_Fail()
{
    Func<string> funcA = () => "key";
    Func<string> funcB = () => "key";
    Assert.That(funcA, Is.EqualTo(funcB));
}

我需要测试并成功断言 Func 的一个实例等于另一个实例。所以我基本上需要一种方法来使失败测试通过。

有没有办法在不创建自定义类型和覆盖 Equals() 的情况下做到这一点?

最佳答案

你的失败测试不应该通过。就 .NET 中的任何内容而言,它们的功能并不相同 - 至少对于当前的 Microsoft C# 编译器实现而言。委托(delegate)将引用单独生成的方法(通过查看 IL 很容易验证。)语言规范允许它们相等,但不要求它,而且我不知道任何实现那会做到这一点。

代表的平等比较基本上包括(对于单 Action 代表):

  • 委托(delegate)是否引用相同的方法?
  • 如果代表有目标,这些目标是否相等?

第一个条件在您的测试中将为假。

关于c# - Func NUnit 相等比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12778579/

相关文章:

python - 我的 '==' 运算符(operator)不工作

c# - Windows Azure 解决方案的最佳单元测试框架

objective-c - 为什么两个相等的对象必须具有相同的哈希值?

c# - 如何带参数调用crossappdomaindelegate-Method

c# - ListView 无法使用 Xamarin Forms 正确呈现

nunit - Assert.AreEqual 不在 IEnumerable 实现上使用我的 .Equals 覆盖

asp.net - 如何使 ASP.NET Webforms 应用程序可测试?

python - 比较可变数量的列表是否相等的更好方法

c# - 如何通过组合其他两个列表来创建新列表?

c# - Mstest 单元测试从命令行失败