NUnit:断言三个或更多值相同
本文关键字:三个 断言 NUnit | 更新日期: 2023-09-27 18:34:04
我需要断言三个值是相同的。
例如,我需要这样的东西
Assert.AreEqual(person1.Name, person2.Name, person3.Name);
Assert.That(person1.Name, Is.EqualTo(person2.Name), Is.EqualTo(person3.Name));
这两个方法只允许比较两个值(前两个参数),第三个参数是输出消息。
我知道CollectionAssert
但我不想只为这种情况创建IEnumerables
。
是否可以在不使用集合的情况下比较 NUnit 中的两个以上参数?接受params[]
或其他东西的方法。
您可以执行 2 个单独的断言:
Assert.AreEqual(person1.Name, person2.Name);
Assert.AreEqual(person1.Name, person3.Name);
或者,您可以创建一个帮助程序函数:
public static class AssertEx
{
public static void AllAreEqual<T>(params T[] items)
{
for (int i = 1; i < items.Length; i++)
{
Assert.AreEqual(items[0], items[i]);
}
}
}
你可以这样使用:
[Test]
public void TestShouldPass()
{
var person1 = new Person { Name = "John" };
var person2 = new Person { Name = "John" };
var person3 = new Person { Name = "John" };
AssertEx.AllAreEqual(person1.Name, person2.Name, person3.Name);
}
[Test]
public void TestShouldFail()
{
var person1 = new Person { Name = "John" };
var person2 = new Person { Name = "Bob" };
var person3 = new Person { Name = "John" };
AssertEx.AllAreEqual(person1.Name, person2.Name, person3.Name);
}
您可以使用基于约束的断言语法:
Assert.That(new [] { person1, person2, person3 }, Is.All.EqualTo(person1));
[Test()]
[TestCase("a","a","a")]
[TestCase("a", "b", "a")]
public void Dummy(string a, string a1, string a2)
{
Assert.That(a, Is.EqualTo(a1).And.EqualTo(a2));
}
给
Expected: "b" and "a"
But was: "a"
1 passed, 1 failed, 0 skipped, took 1.09 seconds (NUnit 2.5.5).
其他需要考虑的事情是 单元测试的第一条规则是"每个测试一个断言",这样可以更快地识别问题所在。 如果您断言所有 3 个都匹配,那么如果一个关闭,则必须找出哪一个。
public void All_Values_Match()
{
Assert.AreEqual(person1.Name, person2.Name);
Assert.AreEqual(person1.Name, person3.Name);
}
如果你做了一些类似的事情
public void First_Second_Values_Match()
{
Assert.AreEqual(person1.Name, person2.Name);
}
public void First_Third_Values_Match()
{
Assert.AreEqual(person1.Name, person3.Name);
}
这为您的测试提供了更清晰的结果。