以前咱們討論了漲姿式UWP的RSS數據源獲取,以及做爲文件存儲到本地,再將數據轉化成Model對象。這部分非UI的內容很是適合添加Unit Test。不涉及UI的話,UT寫起來簡單高效,非常值得投入一點時間以保證程序的可靠性。git
UWP的Unit Test建立起來並不複雜,首先在漲姿式UWP解決方案下,建立和ZhangZiShiRssRead工程同級的UT工程:ZhangZiShiRssRead.UTTest。github
點擊肯定以後,會建立新的UT工程,結構和通常的UWP工程基本一致,同時會自動包含ZhangZiShiRssRead工程的引用,並會建立UnitTestApp這樣的入口文件,以及用於寫Test Case的UnitTest1.cs文件,重命名該文件(一般一個UT工程會有多個UnitTest文件,能夠根據測試內容來取名,好比測試FileStoreHelper類的就能夠叫FileStoreHelper.Test.cs),咱們這裏由於全部Test Case都寫在一個文件中,文件名就叫UnitTest.cs。async
用於Unit Test的類文件和普通類是一樣的寫法,惟一區別是須要加上[TestClass]的attribute來標識。一樣須要運行測試的每一個Test Case,也都要加上[TestMethod]的attribute。單元測試
[TestMethod] public async Task TestSaveFile() { var fileStoreHelper = new FileStoreHelper(); var rssReader = new RssReader(); var result = await rssReader.DownloadRssString(); var isSuccess = await fileStoreHelper.SaveRssFileAsync(result); Assert.IsTrue(isSuccess); } [TestMethod] public async Task TestReadFile() { var fileStoreHelper = new FileStoreHelper(); var rssReader = new RssReader(); var result = await rssReader.DownloadRssString(); await fileStoreHelper.SaveRssFileAsync(result); var content = await fileStoreHelper.ReadRssFileAsync(); Assert.AreEqual<string>(result, content); }
寫好UT以後,能夠經過菜單欄的「測試」來選擇運行全部的Test Case,這時默認會在左側打開測試資源管理器,其中會顯示Pass和Fail的Test Case,堆棧信息等等。測試
這裏須要注意的是,咱們的APP可能會用到一些文件放在Asserts目錄,要保證Test工程也有相同的資源,不然可能會沒法編譯經過。spa
若是在運行測試後,發現個別測試沒有經過,也能夠在測試資源管理器中選中失敗的測試,再點擊菜單「測試」->「調試」->「選定的測試」進行單步調試,設置斷點來判斷問題發生的緣由,就和正常的debug同樣。debug
有時遇到某些對象或數據,在UT環境下沒法拿到,通常有兩個方法。一是經過建立Fake類來提供假的同名類和方法來生產假數據。二是修改要測試類或方法的接口,在建立類實例的時候,將數據從外部傳遞進來。調試
一般一個Test Case會調用被測試的方法,拿到返回值或者某個被修改的標誌位,再經過Assert的方法進行斷言,判斷這個Test Case是否成功運行。咱們可以在Assert類中找到AreEqual,IsFalse,IsNull等等諸如此類的方法。code
在漲姿式UWP中,我添加了TestDownloadRss,TestParseRssXml,TestSaveFile和TestReadFile這四個Test Case,經過測試RssReader和FileStoreHelper兩個類的public方法,進而覆蓋了類內部的private方法。對象
本篇簡單介紹了UWP中的單元測試,有興趣的話能夠去看看代碼。
GitHub源代碼地址:
https://github.com/manupstairs/ZhangZiShiRSSRead
Windows Store:
https://www.microsoft.com/zh-cn/store/p/%e6%b6%a8%e5%a7%bf%e5%8a%bfuwp/9nblggh3zqd1