之前我们讨论了涨姿势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

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

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

    前一篇涨姿势UWP源码分析从数据源着手,解释了RSS feed的获取和解析,本篇则会就数据源的保存和读取进行举例. 和之前的Windows Runtime一样,UWP采用IsolatedStorage ...

  2. UWP源码——Unit Test

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

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

    本篇开始具体分析涨姿势UWP这个APP的代码,首先从数据的源头着手,即RSS feed的获取和解析,相关的类为RssReader,所有和数据相关的操作均放在里面. 涨姿势网站提供的RSS feed地址 ...

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

    涨姿势UWP,一个开源的RSS阅读器,一个纯粹的项目,一个有道德的APP,一个脱离了低级趣味的作者,一些有益于人民的代码.骚年,还等什么,来涨点姿势吧! 该项目代码可能会引起部分人群的不适,敏感人群请 ...

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

    懒癌晚期兼正月里都是过年,一直拖到今天才继续更新.之前的几篇介绍了数据的来源,属于准备工作.本篇我们正式开始构建涨姿势UWP程序的UI界面. 我们这个Hello World程序比较简单,总共只有一个页 ...

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

    上一篇我们介绍了绘制主界面的MainPage.xaml,本篇则会结合MainPage.xaml.cs来讲一讲如何适配电脑和手机这些不同尺寸的设备. 同时适配电脑和手机存在几个麻烦的地方: 屏幕尺寸差距 ...

  7. win10 UWP Markdown 含源码

    Windows下没有比較好的Markdown编辑器 我就自己写一个 csdn的Markdown非常好,就是我须要截图保存有麻烦 须要把我的截图保存在本地,然后上传 这个过程比較麻烦 csdn的图没法外 ...

  8. QQ2008自动聊天精灵delphi源码

    QQ2008自动聊天精灵delphi源码   unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Grap ...

  9. 涨姿势UWP源码——IsolatedStorage

    前一篇涨姿势UWP源码分析从数据源着手,解释了RSS feed的获取和解析,本篇则会就数据源的保存和读取进行举例. 和之前的Windows Runtime一样,UWP采用IsolatedStorage ...

随机推荐

  1. rabbitmq集群安装

        在配置文件中配置集群没有成功,但是使用命令行成功了,以下是过程请参考.     场景:两台机器,一台是10.1.3.95 hostname为mq1,一台是10.1.3.96 hostname为 ...

  2. Spring 3种注入方式

    spring的三种注入方式: 接口注入(不推荐) getter,setter方式注入(比较常用) 构造器注入(死的应用) 关于getter和setter方式的注入: autowire="de ...

  3. MJExtension笔记(一)

    之前有说,看好的编程就去敲好的开源项目:一直觉得这个无从下手,但是这次跟着一点点敲MJExtension,我明白了这句话的深度:其实并不需要去找,每一个三方项目都有很多值得学习的地方:笔记一只记录在敲 ...

  4. 常用正则表达式-copy

    匹配中文:[\u4e00-\u9fa5] 英文字母:[a-zA-Z] 数字:[0-9] 匹配中文,英文字母和数字及_: ^[\u4e00-\u9fa5_a-zA-Z0-9]+$ 同时判断输入长度:[\ ...

  5. mysql5.7 代价模型浅析

    代价模型 mysql 5.7.10代价计算相对之前的版本有5.7 代价模型浅析较大的改进.例如 代价模型参数可以动态配置,可以适应不同的硬件 区分考虑数据在内存和在磁盘中的代价 代价精度提升为浮点型 ...

  6. 对map集合进行排序

          今天做统计时需要对X轴的地区按照地区代码(areaCode)进行排序,由于在构建XMLData使用的map来进行数据统计的,所以在统计过程中就需要对map进行排序. 一.简单介绍Map   ...

  7. 图文详解Unity3D中Material的Tiling和Offset是怎么回事

    图文详解Unity3D中Material的Tiling和Offset是怎么回事 Tiling和Offset概述 Tiling表示UV坐标的缩放倍数,Offset表示UV坐标的起始位置. 这样说当然是隔 ...

  8. AWS re:Invent 2014回顾

    亚马逊在2014年11月11-14日的拉斯维加斯举行了一年一度的re:Invent大会.在今年的大会上,亚马逊一股脑发布和更新了很多服务.现在就由我来带领大家了解一下这些新服务. 安全及规范相关 AW ...

  9. 使用ruby过程中遇到安装gem失败的一些通用解决方案

    ruby语言升级还是比较勤快的.但是数量众多的版本使得程序库的兼容性成了大问题.有些gem表示明确不支持某个特定版本以前的ruby,而有些gem则与较高的版本不兼容.再加上gem本身也有版本,简直是乱 ...

  10. 你不可不知的HTML优化技巧

    如何提升Web页面的性能,很多开发人员从多个方面来下手如JavaScript.图像优化.服务器配置,文件压缩或是调整CSS. 很显然HTML 已经达到了一个瓶颈,尽管它是开发Web 界面必备的核心语言 ...