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

kar*_*ara 2 c# nunit unit-testing assert

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

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

[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..");
}
Run Code Online (Sandbox Code Playgroud)

失败测试的输出:

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

预期:正好 2 件

但是是:没有项目

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

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

我的问题:

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

也许像

Assert.That(result, Contains.Exacly(2).Items.Which(i => i.SomeProperty == "expectedValue"))
Run Code Online (Sandbox Code Playgroud)

Ker*_*ter 6

Matches专用于此的约束表达式。这种情况下的用法可能如下所示:

Assert.That(result, 
    Has.Exactly(2).Matches<MyClass>(r => r.SomeProperty == "expectedValue"),
    "Two Items should match this..");
Run Code Online (Sandbox Code Playgroud)