以往在針對方法的執行結果進行資料排序的驗證時,比較直接的做法就是取得 collection 的第一筆與最後一筆,然後再依據用什麼條件做排序去比較兩筆資料,例如使用日期為條件而且是由新到舊的排序,那麼第一筆資料必須要比最後一筆資料的日期還要新,大概是用這樣的方式做資料排序的驗證。
不過這樣的做法還蠻土砲的,所以就用 Fluent Assertions 所提供的方法來處理吧。
這邊會用到「輸出測試用資料的 CSV 檔案 - 使用 LINQPad, AutoMapper, CsvHelper」這一篇文章裡所匯出的 CSV 測試資料。
單元測試程式裡使用匯出到 CSV 檔案的測試資料
Product.cs
public class Product
{
public int ProductID { get; set; }
public string Name { get; set; }
public string ProductNumber { get; set; }
public bool MakeFlag { get; set; }
public bool FinishedGoodsFlag { get; set; }
public string Color { get; set; }
public short SafetyStockLevel { get; set; }
public short ReorderPoint { get; set; }
public decimal StandardCost { get; set; }
public decimal ListPrice { get; set; }
public string Size { get; set; }
public string SizeUnitMeasureCode { get; set; }
public string WeightUnitMeasureCode { get; set; }
public decimal? Weight { get; set; }
public int DaysToManufacture { get; set; }
public string ProductLine { get; set; }
public string Class { get; set; }
public string Style { get; set; }
public int? ProductSubcategoryID { get; set; }
public int? ProductModelID { get; set; }
public DateTime SellStartDate { get; set; }
public DateTime? SellEndDate { get; set; }
public DateTime? DiscontinuedDate { get; set; }
public Guid rowguid { get; set; }
public DateTime ModifiedDate { get; set; }
}
很直接的做法
升冪排序的驗證
資料 collection 的第一筆資料應該會小於最後一筆
降冪排序的驗證
資料 collection 的第一筆資料應該會大於最後一筆
以上的做法好像也沒錯,但總覺得驗證性不太足夠,所以就改用 Fluent Assertios 所提供的方法。
Fluent Assertions
之前所寫的文章介紹「編寫單元測試時的好用輔助套件 - Fluent Assertions」
https://github.com/dennisdoomen/fluentassertions/wiki#collections
這次會用到四個方法,分別為:
BeInAscendingOrder, NotBeAscendingOrder, BeInDescendingOrder, NotBeDescendingOrder
升冪排序的驗證
驗證 Product Collection 都是以 ProductID 做升冪排序,而且 ProductID 不是降冪排序,後者是以取出 ProdictID 的 collection 使用 int 型別的排序驗證
降冪排序的驗證
驗證 Product Collection 都是以 ProductID 做降冪排序,且 ProductID 不是升冪排序,後者是以取出 ProdictID 的 collection 使用 int 型別的排序驗證
測試執行結果
以上
純粹是在寫興趣的,用寫程式、寫文章來抒解工作壓力