我們在寫代碼的時候不能保證我們寫出來的代碼是正確的,所以我們經常要單元測試。
單元測試和重構都是在做完一個小小函數一般就要進行一次,越早做就越好,可以比較早發現問題,這時我們還記得我們寫的內容,不過比重構好的是,重構我們經常不知道要叫什麼名字,而單元測試反而就比較簡單。
右擊解決方案,添加新項目
C#->Windows->通用->單元測試應用
命名我是叫 測試
在新建單元測試右擊引用
把工程引用
打開測試項目
一般測試哪個類我就會新建一個類名稱和要測試類相同,類裏面函數和要測試函數名相同。
我在做一個windows Markdown,裏面有函數把剪貼的文本覆蓋Textbox選文本,我不知道這個函數寫的是不是對,於是我就在單元測試,新建一個類
測試函數所在的類是winmain,所以在單元測試新建一個類winmain
在新建類加上
using Microsoft.VisualStudio.TestPlatform.UnitTestFramework;
最新版 是 using Microsoft.VisualStudio.TestTools.UnitTesting;
在類定義前添加特性,如下:
[TestClass]
只有在類添加這個特性,這個類纔可以做測試。
在類裏面加函數 clipboard_substitution 函數需要在函數前添加特性,如下代碼。添加了特性就是告訴vs,我就是測試函數,你可以運行我。
[TestMethod]
可以看到添加了這個,在左邊就出現了一個按鈕,可以進行測試,點擊就會運行這個函數。
接下來就來進行測試一個小東西。
我的函數需要測試輸入一個文本是否會把選擇的 string 替換輸入文本的小函數。
我們在測試單元寫測試輸入下面代碼,如何寫測試的請去看下 測試代碼如何寫 相關的文章,也就是把所有可能的輸入和想要的輸出寫出來,判斷是不是程序運行和要的一樣,如果不是的話,報錯。
var view =new produproperty.ViewModel.winmain(null); string text = "要替換文本"; //把替換兩個字替換爲string view.text = text; view.select = 1; view.select_length = 2; view.clipboard_substitution("string");
上面的代碼就是謝輸入是什麼,然後就是寫輸出是什麼,判斷程序的運行是否和想要的一樣。判斷是否一樣,可以使用 Assert ,現在輸入已經寫完了, 然後寫 Assert
Assert.AreEqual("要string文本",view.text);
看起來函數已經寫完了,開始測試
右擊運行
如果有很多個測試的函數,不需要一個個來,可以使用下面的方法執行測試類所有方法
可以在運行 所有測試
如果看到下面的圖,那麼 測試通過
我們還要做一些詭異測試,也就是程序考慮不到的,如 出現錯誤 Index and length must refer to a location within the string.
這樣就是我們函數有問題,測試就是保證程序是正確的,也就是在正常的輸入是正確的,對不特殊輸入還可以做一些可以把特殊的輸入變爲正常的,或者其他的,就是不讓程序直接就異常了。
當然有些輸入還是需要異常的,於是異常,也可以測試。只需要在特性加一個希望的異常,這樣就好了。
對於測試寫完, 如果通過了我們纔可以說我們代碼可以提交
Assert 是返回結果 true 方法是測試通過,如果是其他就不通過,Assert 可以有方法推薦使用
方法 | 描述 |
---|---|
AreEqual | 兩個值是否相等 |
AreNotEqual | 兩個值不相等 |
AreNotSame | 兩個值不相同 |
AreSame | 兩個值相同 |
WPF 單元測試
對於 WPF 的單元測試,可以新建一個控制檯項目,然後右擊引用
添加 Microsoft.VisualStudio.QualityTools.UnitTestFramework 然後其他和UWP一樣。
注意命名空間 using Microsoft.VisualStudio.TestTools.UnitTesting;
然後把測試類寫公開,其他和 UWP 一樣
異步測試
參見:https://msdn.microsoft.com/zh-cn/magazine/dn818493.aspx