引言
很多時候,需要對類中的方法進行一些測驗,來判斷是否能按要求輸出預期的結果,
C#提供了快速創建單元測驗的方法,但單元測驗不僅速度慢不方便,大量的單元測驗還會拖慢專案的啟動速度,
所以決定自己搞個方便的測驗用例,
控制臺呼叫
只需要簡簡單單的一句話
測驗用例.注冊并Print(EnumEx.Name);
結果畫面

測驗用例的實作
/// <summary> /// 提供測驗用例的注冊和運行功能,用來比對結果和預期值是否相同,向控制臺輸出結果, /// </summary> public class 測驗用例 { /// <summary> /// 測驗的方法 /// </summary> public Func<string> 方法 { get; set; } /// <summary> /// 測驗名稱 /// </summary> public string 名稱 { get; set; } /// <summary> /// 期望得到的結果string /// </summary> public string 期望值 { get; set; } /// <summary> /// 新建一個測驗 /// </summary> /// <param name="v名稱">測驗名稱</param> /// <param name="v期望值">期望得到的結果string</param> /// <param name="v方法">測驗的方法</param> public 測驗用例(string v名稱, string v期望值, Func<string> v方法) { 名稱 = v名稱; 期望值 = v期望值; 方法 = v方法; } /// <summary> /// 儲存所有注冊的方法, /// </summary> public static OrderedDictionary<string, 測驗用例> 方法冊 = new OrderedDictionary<string, 測驗用例>(); /// <summary> /// 將「回傳值為string的方法〈Func<string>〉」注冊到「方法冊」中, /// </summary> /// <param name="測驗用例">要注冊的測驗</param> /// <returns>回傳是否注冊成功</returns> public static bool 注冊(測驗用例 測驗用例) { return 方法冊.添加(測驗用例.名稱, 測驗用例); } /// <summary> /// 運行指定名稱的測驗并回傳運行結果〈<see cref="string"/>〉 /// </summary> /// <param name="名稱">方法注冊到測驗的名稱</param> /// <returns>回傳運行結果〈<see cref="string"/>〉</returns> public static string 運行(string 名稱) { if (方法冊.有鍵(名稱)) { return 方法冊[名稱].方法.Invoke(); } else { return 名稱 + " : 不存在該方法!"; } } /// <summary> /// 注冊并向控制臺輸出運行結果, /// </summary> /// <param name="測驗用例"></param> public static void 注冊并Print(測驗用例 測驗用例) { if(方法冊.添加(測驗用例.名稱, 測驗用例)) { Print(測驗用例.名稱); } } /// <summary> /// 向控制臺輸出運行結果, /// </summary> /// <param name="測驗用例"></param> public static void Print(測驗用例 測驗用例) { Print(測驗用例.名稱); } /// <summary> /// 向控制臺輸出運行結果, /// </summary> /// <param name="名稱"></param> public static void Print(string 名稱) { string 結果 = 運行(名稱); string 期望 = 方法冊[名稱].期望值; Console.WriteLine(名稱 + "\r\nResult: "+ 結果); Console.Write("期望值: " + 期望); if (結果 == 期望) { var c = Console.ForegroundColor; Console.ForegroundColor = ConsoleColor.Green; Console.WriteLine(" [TRUE]"); Console.ForegroundColor = c; } else { var c = Console.ForegroundColor; Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine(" [FALSE]"); Console.ForegroundColor = c; } } }
它可以方便的測驗某個方法的回傳string是否等于設定期望值
可以輸出到控制臺,也可以保存在string,
要測驗的類,位于專案 namespace:
//************************************************************ /// <summary> /// ◇ 增強 列舉〖System.Enun〗的擴展功能, /// </summary> /// <seealso cref="Enum"/> /// <remarks></remarks> //************************************************************ public static class EnumEx { //=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- /// <summary> /// 回傳列舉 「thisEnum」 的定義名稱〈<see cref="string"/>〉 /// </summary> /// <param name="thisEnum">該列舉自身</param> /// <returns>〈string〉回傳列舉的定義名稱</returns> public static string Name(this Enum thisEnum) { return Enum.GetName(thisEnum.GetType(), thisEnum); }
測驗用例是這樣的,把它放到專案.Test namespace中以避免重名:
這里填入要顯示的名稱、期望值、方法體,
?方法體的回傳引數必須為 string
?兩個用例名稱不能相同否則會覆寫,
/// <summary> /// EnumEx的測驗用例, /// </summary> public class EnumEx { /// <summary>【測驗用例】EnumEx.Name() </summary> public static 測驗用例 Name = new 測驗用例("EnumEx.Name - UriComponents.Path.Name()", "Path", NameFunc); /// <summary>【測驗方法】UriComponents.Path呼叫EnumEx.Name() 回傳值 ? "Path" </summary> /// <returns>回傳值應該等于"Path"</returns> public static string NameFunc() { return UriComponents.Path.Name(); } }
最后在新建控制臺應用程式,就叫專案.Test,這樣測驗有關內容處在相同namespace,直接呼叫就行了
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/68924.html
標籤:C#
