[UWP]涨姿势UWP源码——Unit Test

原文:[UWP]涨姿势UWP源码——Unit Test

  之前我们讨论了涨姿势UWP的RSS数据源获取,以及作为文件存储到本地,再将数据转化成Model对象。这部分非UI的内容非常适合添加Unit Test。不涉及UI的话,UT写起来简单高效,很是值得投入一点时间以保证程序的可靠性。

  UWP的Unit Test创建起来并不复杂,首先在涨姿势UWP解决方案下,创建和ZhangZiShiRssRead工程同级的UT工程:ZhangZiShiRssRead.UTTest。

  

  点击确定之后,会创建新的UT工程,结构和一般的UWP工程基本一致,同时会自动包含ZhangZiShiRssRead工程的引用,并会创建UnitTestApp这样的入口文件,以及用于写Test Case的UnitTest1.cs文件,重命名该文件(通常一个UT工程会有多个UnitTest文件,可以根据测试内容来取名,比如测试FileStoreHelper类的就可以叫FileStoreHelper.Test.cs),我们这里因为所有Test Case都写在一个文件中,文件名就叫UnitTest.cs。

  用于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工程也有相同的资源,否则可能会无法编译通过。

  如果在运行测试后,发现个别测试没有通过,也可以在测试资源管理器中选中失败的测试,再点击菜单“测试”->“调试”->“选定的测试”进行单步调试,设置断点来判断问题发生的原因,就和正常的debug一样。

  有时遇到某些对象或数据,在UT环境下无法拿到,一般有两个方法。一是通过创建Fake类来提供假的同名类和方法来生产假数据。二是修改要测试类或方法的接口,在创建类实例的时候,将数据从外部传递进来。

  通常一个Test Case会调用被测试的方法,拿到返回值或者某个被修改的标志位,再通过Assert的方法进行断言,判断这个Test Case是否成功运行。我们能够在Assert类中找到AreEqual,IsFalse,IsNull等等诸如此类的方法。

  在涨姿势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

 

时间: 2024-08-04 03:41:33

[UWP]涨姿势UWP源码——Unit Test的相关文章

[UWP]涨姿势UWP源码——RSS feed的获取和解析

原文:[UWP]涨姿势UWP源码--RSS feed的获取和解析 本篇开始具体分析涨姿势UWP这个APP的代码,首先从数据的源头着手,即RSS feed的获取和解析,相关的类为RssReader,所有和数据相关的操作均放在里面. 涨姿势网站提供的RSS feed地址为http://www.zhangzishi.cc/feed,在UWP中想要通过发送http request并从URI接受http response,最简单的方式就是使用HttpClient: public async Task<st

[UWP]涨姿势UWP源码——极简的RSS阅读器

原文:[UWP]涨姿势UWP源码--极简的RSS阅读器 涨姿势UWP,一个开源的RSS阅读器,一个纯粹的项目,一个有道德的APP,一个脱离了低级趣味的作者,一些有益于人民的代码.骚年,还等什么,来涨点姿势吧! 该项目代码可能会引起部分人群的不适,敏感人群请在父母陪同下阅读. 看到第三段的骚年们,我想你们是对这个RSS的阅读器感兴趣了,该项目是一个极为简单的UWP的工程,代码托管在GitHub上,供有兴趣学习UWP APP开发的童鞋们参考.工程主要包括以下几个文件: 工程 文件 备注 ZhangZ

[UWP]涨姿势UWP源码——IsolatedStorage

原文:[UWP]涨姿势UWP源码--IsolatedStorage 前一篇涨姿势UWP源码分析从数据源着手,解释了RSS feed的获取和解析,本篇则会就数据源的保存和读取进行举例. 和之前的Windows Runtime一样,UWP采用IsolatedStorage的方式来存储APP的私有数据,这样做到APP之间互不干扰,减少了错误及安全隐患.现在的Application的设计似乎都流行这个做法. UWP中对应用程序数据存储区的访问,通常使用ApplicationData这个类来操作,我们把最

[UWP]涨姿势UWP源码——UI布局

原文:[UWP]涨姿势UWP源码--UI布局 懒癌晚期兼正月里都是过年,一直拖到今天才继续更新.之前的几篇介绍了数据的来源,属于准备工作.本篇我们正式开始构建涨姿势UWP程序的UI界面. 我们这个Hello World程序比较简单,总共只有一个页面,在PC和Tablet上呈左右分开,左边以列表显示新闻标题及简述,右边则显示新闻正文. 对于这样的一个布局,Grid无疑是最为合适的Panel,大体是以下的结构: <Grid> <Grid.ColumnDefinitions> <C

[UWP]涨姿势UWP源码——适配电脑和手机

原文:[UWP]涨姿势UWP源码--适配电脑和手机 上一篇我们介绍了绘制主界面的MainPage.xaml,本篇则会结合MainPage.xaml.cs来讲一讲如何适配电脑和手机这些不同尺寸的设备. 同时适配电脑和手机存在几个麻烦的地方: 屏幕尺寸差距过大,不太适合以手机为基准,然后在电脑上等比放大. 手机屏幕小,但是分辨率高.比如Lumia 950的2K屏就默认采用400%的比例来显示. 手机一般默认竖屏.电脑会有16:9,3:2各种比例,且默认横屏.导致整体布局需要调整. 其他细节讨论可以看

微软支持虚幻4引擎,发布引擎 UWP 分支源码

虚幻4引擎已经是许多游戏开发者首选的游戏开发工具了,不管是在主机或PC游戏,虚幻4引擎都能够胜任且被开发者信赖.现在微软宣布了对虚幻4引擎提供UWP通用平台支持,微软还在GitHub上以Epic Games虚幻4引擎的分支名义发表了UWP分支源码. 虚幻4引擎 UWP分支版可由此进入,但需要先加入Epic开发计划和拥有Epic GitHub Org用户.该项目采用社区支持形式,微软Xbox Advanced Technology Group(ATG,先进技术组)将为之提供周期更新,并帮助加速UW

Spark SQL组件源码分析

功能 Spark新发布的Spark SQL组件让Spark对SQL有了别样于Shark基于Hive的支持.参考官方手册,具体分三部分: 其一,能在Scala代码里写SQL,支持简单的SQL语法检查,能把RDD指定为Table存储起来.此外支持部分SQL语法的DSL. 其二,支持Parquet文件的读写,且保留Schema. 其三,能在Scala代码里访问Hive元数据,能执行Hive语句,并且把结果取回作为RDD使用. 第一点对SQL的支持主要依赖了Catalyst这个新的查询优化框架(下面会给

WebWork2源码分析

web Author: zhuam   昨晚一口气看完了夏昕写的<<Webwork2_Guide>>,虽然文档资料很简洁,但仍不失为一本好的WebWork2书籍,看的出作者的经验和能力都是非常的老道,在此向作者的开源精神致敬,并在此引用夏昕的那句话So many open source projects, Why not Open your Documents?   今天下载了最新的WebWork2版本, 开始了源码分析,这份文档只能算是我的个人笔记,也没时间细细校对,且个人能力有

AS3游戏-3D俄罗斯方块源码

需要pv3d 引擎的支持: package {      import flash.display.Sprite;      import flash.text.TextField;      import flash.events.Event;      import flash.events.KeyboardEvent;      import flash.utils.getTimer;        import org.papervision3d.materials.*;      im