C#建立自己的測試用例系統


引言

很多時候,需要對類中的方法進行一些測試,來判斷是否能按要求輸出預期的結果。

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&lt;string&gt;〉」注冊到「方法冊」中。
        /// </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,直接調用就行了

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM