C#建立自己的測試用例系統
阿新 • • 發佈:2020-12-29
引言
很多時候,需要對類中的方法進行一些測試,來判斷是否能按要求輸出預期的結果。
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是否等於[c#教程](https://www.xin3721.com/eschool/CSharpxin3721/)設定期望值
可以輸出到控制檯,也可以儲存在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);
}
複製程式碼
測試用例是這樣的,把它放到python基礎教程
專案.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,直接呼叫就行了