如何使用 NUnit “Assert.That()”列表中的项目匹配某些条件?

我正在编写一些单元测试并想检查结果列表。


这是我正在做的一个简单的例子:


[Test]

public void FilterSomething_Test()

{

    List<MyClass> testdata = new List<MyClass>

    {

        new MyClass { SomeProperty = "expectedValue" },

        new MyClass { SomeProperty = "expectedValue" },

        new MyClass { SomeProperty = "unexpectedValue" },

        new MyClass { SomeProperty = "unexpectedValue" },

        new MyClass { SomeProperty = null },

    }


    List<MyClass> result = FilterSomething(testdata);


    Assert.That(

        result.Where(r => r.SomeProperty == "expectedValue"),

        Has.Exactly(2).Items,

        "Two Items should match this..");

}

失败测试的输出:


两个项目应该与此匹配..


预期:正好 2 件


但是是:没有项目


输出并没有解释出了什么问题。


说明:我有多个测试的测试数据。这就是为什么我想在每次测试中检查特定项目。


我的问题:


有没有办法检查列表中的项目计数并从中获取正确的消息NUnit?


也许像


Assert.That(result, Contains.Exacly(2).Items.Which(i => i.SomeProperty == "expectedValue"))


明月笑刀无情
浏览 110回答 2
2回答

森林海

有Matches专用于此的约束表达式。这种情况下的用法可能如下所示:Assert.That(result,&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;Has.Exactly(2).Matches<MyClass>(r&nbsp;=>&nbsp;r.SomeProperty&nbsp;==&nbsp;"expectedValue"), &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"Two&nbsp;Items&nbsp;should&nbsp;match&nbsp;this..");

白衣染霜花

是的,一点没错!NUnit 约束可以链接在一起,以允许您在实际断言方面真正具有规范性。这样做的优点是,当测试失败时,您将获得更精确的错误消息 - 因此在我看来,在实际的 NUnit 断言中包含尽可能多的逻辑是一种很好的做法。在这种情况下,我相信你可以写这样的东西:Assert.That(result, &nbsp;Contains.Exactly(2).Items.Property(nameof(MyClass.ExpectedProperty)).EqualTo("expectedValue");
打开App,查看更多内容
随时随地看视频慕课网APP