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/