我需要声明三个值是相同的。
例如,我需要这样的东西
Assert.AreEqual(person1.Name, person2.Name, person3.Name);
Assert.That(person1.Name, Is.EqualTo(person2.Name), Is.EqualTo(person3.Name));
这两个方法只允许比较两个值(前两个参数),第三个参数是输出消息。
我知道CollectionAssert
,但我不想仅为此案例创建IEnumerables
。
是否可以在不使用集合的情况下比较NUnit中的两个以上参数?一些接受params[]
或其他东西的方法。
答案 0 :(得分:2)
您可以执行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);
}
答案 1 :(得分:1)
您可以使用constraint-based assertion语法:
Assert.That(new [] { person1, person2, person3 }, Is.All.EqualTo(person1));
答案 2 :(得分:0)
[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 :(得分:0)
要考虑的其他事情是单元测试的第一个规则是#34;每个测试一个断言&#34;,这可以更快地识别出问题所在。如果你断言所有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);
}
这为您的测试提供了更清晰的结果。