【发布时间】:2020-08-01 10:09:35
【问题描述】:
有没有办法进行自定义约束,先完成 NUnit 的默认相等测试,然后再进行自定义相等测试?
例如,假设我想测试System.Double 的值是否相等,但将Double.PositiveInfinity 视为等于Double.NegativeInfinity。我可以在下面的代码中编写一个简单的测试Comparison 来检查这种特殊情况,然后只使用==。
-
如果我使用
Is.EqualTo(expected).Using<double>((x, y) => Comparison(x, y));然后NaNisEqualToNaN失败,因为我没有 NUnit 的默认相等测试。 -
如果我使用
Is.EqualTo(expected).Or.EqualTo(expected).Using<double>((x, y) => Comparison(x, y));结合自定义测试和默认测试 然后像ShouldFail_NegativeInfinityIsKindaEqualTo7这样的失败测试会给出重复的错误消息Expected: 7.0d or 7.0d But was...
完整代码示例:
using System;
using NUnit.Framework;
using NUnit.Framework.Constraints;
namespace UnitTest
{
[TestFixture]
public class Class1
{
private Constraint IsKindaEqualTo(double expected)
{
// With this line, ShouldFail_NegativeInfinityIsKindaEqualTo7 reports "Expected: 7.0d or 7.0d But was: ∞"
return Is.EqualTo(expected).Or.EqualTo(expected).Using<double>((x, y) => Comparison(x, y));
// With this line, the NaNisEqualToNaN test fails
//return Is.EqualTo(expected).Using<double>((x, y) => Comparison(x, y));
}
private static bool Comparison(double x, double y)
{
if (Double.IsInfinity(x) && Double.IsInfinity(y))
{
return true;
}
else
{
return x == y;
}
}
[Test]
public void NegativeInfinityIsKindaEqualToPositiveInfinity()
{
var actual = Double.NegativeInfinity;
var expected = Double.PositiveInfinity;
Assert.That(actual, IsKindaEqualTo(expected));
}
[Test]
public void ShouldFail_NegativeInfinityIsKindaEqualTo7()
{
var actual = Double.PositiveInfinity;
var expected = 7.0;
Assert.That(actual, IsKindaEqualTo(expected));
}
[Test]
public void NaNisEqualToNaN()
{
var actual = Double.NaN;
var expected = Double.NaN;
Assert.That(actual, Is.EqualTo(expected));
}
[Test]
public void NaNisKindaEqualToNan()
{
var actual = Double.NaN;
var expected = Double.NaN;
Assert.That(actual, IsKindaEqualTo(expected));
}
}
}
【问题讨论】:
标签: c# unit-testing nunit nunit-3.0