NUnit:断言三个或更多值是相同的

时间:2014-12-11 10:03:48

标签: c# nunit

我需要声明三个值是相同的。

例如,我需要这样的东西

Assert.AreEqual(person1.Name, person2.Name, person3.Name);

Assert.That(person1.Name, Is.EqualTo(person2.Name), Is.EqualTo(person3.Name));

这两个方法只允许比较两个值(前两个参数),第三个参数是输出消息。

我知道CollectionAssert,但我不想仅为此案例创建IEnumerables

是否可以在不使用集合的情况下比较NUnit中的两个以上参数?一些接受params[]或其他东西的方法。

4 个答案:

答案 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);
 }

这为您的测试提供了更清晰的结果。