我正在編寫一些單元測試并想檢查結(jié)果列表。這是我正在做的一個簡單的例子:[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..");}失敗測試的輸出:兩個項(xiàng)目應(yīng)該與此匹配..預(yù)期:正好 2 件但是是:沒有項(xiàng)目輸出并沒有解釋出了什么問題。說明:我有多個測試的測試數(shù)據(jù)。這就是為什么我想在每次測試中檢查特定項(xiàng)目。我的問題:有沒有辦法檢查列表中的項(xiàng)目計(jì)數(shù)并從中獲取正確的消息NUnit?也許像Assert.That(result, Contains.Exacly(2).Items.Which(i => i.SomeProperty == "expectedValue"))
2 回答

森林海
TA貢獻(xiàn)2011條經(jīng)驗(yàn) 獲得超2個贊
有Matches
專用于此的約束表達(dá)式。這種情況下的用法可能如下所示:
Assert.That(result, Has.Exactly(2).Matches<MyClass>(r => r.SomeProperty == "expectedValue"), "Two Items should match this..");

白衣染霜花
TA貢獻(xiàn)1796條經(jīng)驗(yàn) 獲得超10個贊
是的,一點(diǎn)沒錯!NUnit 約束可以鏈接在一起,以允許您在實(shí)際斷言方面真正具有規(guī)范性。這樣做的優(yōu)點(diǎn)是,當(dāng)測試失敗時,您將獲得更精確的錯誤消息 - 因此在我看來,在實(shí)際的 NUnit 斷言中包含盡可能多的邏輯是一種很好的做法。
在這種情況下,我相信你可以寫這樣的東西:
Assert.That(result, Contains.Exactly(2).Items.Property(nameof(MyClass.ExpectedProperty)).EqualTo("expectedValue");
- 2 回答
- 0 關(guān)注
- 153 瀏覽
添加回答
舉報
0/150
提交
取消