[英]Fluent assertion should be greater than always pass
我正在嘗試使用以下方法測試我的收藏集:
var costByFactoryt = dataAccess.GetcostPerFactoryt(null, null);
costByFactoryt.Count().Should().BeGreaterThan(0);
costByFactoryt.Select(x => x.Cost.Should().BeGreaterThan(100));
但是問題是,如果我將代碼的最后一行更改為
costByFactoryt.Select(x => x.Cost.Should().BeGreaterThan(1000));
要么
costingByCircuit.Select(x => x.Cost.Should().BeLessThan(100));
它仍然通過,這是錯誤的。
我要測試的是,所有費用應大於100。
那樣根本行不通,因為LINQ Select不會迭代集合=>未執行您的測試代碼
正確的語法應該是
costingByCircuit.Select(x => x.Cost).Should().OnlyContain(x => x > 100);
然后寫costByFactoryt.Select(x => x.Cost.Should().BeGreaterThan(100));
是什么都不測試。 它創建了一個懶惰的LINQ表達式,該表達式永遠不會被迭代,即BeGreaterThan
都BeGreaterThan
被調用。
當使用流利的斷言,你會得到你避免使用最詳細的故障信息Select
更多的信息,然后提供給失敗的消息發生器。
什么時候
costByFactoryt.Select(x => x.Cost).Should().OnlyContain(x => x > 100)
失敗,消息生成器將輸出Cost
對象。
通過寫
costByFactoryt.Should().OnlyContain(x => x.Cost > 100)
失敗消息將包含所有x
對象。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.