[小北De编程手记] : Lesson 01 玩转 xUnit.Net 之 概述
谈到单元测试,任何一个开发或是测试人员都不会觉得陌生。我想大多数的同学也都是接触过各种单元测试框架。关于单元测试的重要性,应该不会有太多的质疑。这个系列,我向大家介绍一下xUnit.Net的使用。就让我们一起来玩转xUnit.Net吧。本文要讨论的内容如下:
- 单元测试框架提供了什么
- .Net平台常见单元测试框架介绍
- xUnit.Net简介
- xUnit.Net 安装
- 第一个xUnit.Net Case
(一)单元测试框架的提供了什么
有很多小伙伴经常会提到所谓“框架”,框架这样的概念有很多比如:XX开发框架,ORM框架,Selenium框架,Mock框架以及我们要提到的单元测试框架。这些概念随处可见,在我看来学习一个技术框架的开始,最好是了解一下它为我们提供了什么?那么,一般使用者期望的单元测试框架应该为我们提供哪些功能呢?
- 运行 Test Case:这包括直接运行测试用例,或是以数据驱动的方式来运行
- 断言判断:用来判断测试结果是否合理的系统支持
- 不同级别的Fixture(夹具,这个单词这么翻译过来总觉的怪怪的~~):即可以在Case开始和结束的时候做一些初始化的操作,以及支持AUT的理念
- 输出日志:可以在不同的载体上输出Case的运行日志
以上4个功能是每一个单元测试框架都会提供的能力,而且xUnit.Net框架(也包括常见的测试框架)还提供了其他炫酷的功能。关于单元测试的质量,实施的难度... ... 等话题我会在本系列最后的总结中跟大家分享个人的感受和经验。那么,就让我们一步步的开始我们的单元测试之旅吧。
(二).Net平台常见单元测试框架介绍
这个部分就和大家一起来简要的浏览一下.NET平台下面几种常见的单元测试框架,关于每种框架的对比网上已经有过无数的对照表了这里我就不在赘述了:
- NUnit : 是xUnit家族的产品之一,也是被广泛使用的单元测试框架。
- MsTest : MS Test框架是Visual Studio自带的测试框架,由微软提供。
- MbUnit : 实现了大师Marc Clifton关于单元测试的一些设想,Marc提出了一种形式化的超越基本的TDD的测试模式, Marc然后把它的思想转化为代码叫做AUT(Advanced Unit Testing)。
- xUnit.Net(推荐) : 本系列要介绍给大家的单元测试框架,本人觉得这是集合了NUnit 和MbUnit之长的一个扩展性很好的单元测试框架
(三)xUnit.Net简介
xUnit.Net的由来:NUnit的创造者Jim Newkirk公布了一个新的单元测试框架,叫做xUnit.net。这是一个以NUnit的接班人自许的新框架,作者打算消除NUnit的错误和缺点,并在框架中加入一些最佳实践和扩展能力。xUnit.Net是开源的GitHub地址:https://github.com/xunit/xunit。
@Attribute
在单元测试的Attribute方面xUnit.Net做了一些精简,图中我们可以看到xUnit.Net有了以下几个不同于其他单元测试框架的地方:
- 移除了针对Class级别的标签
- 其他框架所提供的Test Case开始和结束的操作函数标记,利用C#的构造函数和IDispose.Dispose接口代替
- 提供了更加优雅的方式实现了大师Marc Clifton关于Fixture的设想。(即IClassFixture和ICollectionFixture)
- 简化了Ignore Case的方法
- 提供了对数据驱动测试的支持
@Assertion
断言是每个单元测试框架的另一个重要功能,而在这一方面xUnit.Net简化了很多其他框架中略微重复的功能。与此同时也提供了灵活的扩展方式给使用者,关于如何扩展xUnit.Net我会在随后的文章中详细的介绍。
(四)xUnit.Net 安装
这一部分内容在我另一个系列《Selenium For C# 教程》的第一篇《[小北De编程手记] : Lesson 01 - Selenium For C# 之 环境搭建》中已经有所描述,这里再重复一下:
Step 01: 打开你的VS2013,选择"Extensions and Updates",搜索并安装xUnit.Net 项目模板
Step 02: 新建一个xUnit.net 的单元测试项目(Demo.SeleniumTest),点击“ok”。
Step 03:右键项目的References,并选择Manager NuGet Packages... , 下载最新版本的xUnit.Net. , 以及Selenium 的驱动包。
搜索并安装最新版的xUnit.Net。
PS:也可以不下载模板,直接创建一个类库,用Nuget添加xUnit.Net的引用即可。
(五)第一个xUnit.Net Case
前面说了那么多,下面我们就来看看一个简单的xUnit.Net测试用例是什么样子:
1 using System; 2 using System.Collections.Generic; 3 using Xunit; 4 5 public class EqualExample 6 { 7 [Fact] 8 public void EqualStringIgnoreCase() 9 { 10 string expected = "TestString"; 11 string actual = "teststring"; 12 13 Assert.False(actual == expected); 14 Assert.NotEqual(expected, actual); 15 Assert.Equal(expected, actual, StringComparer.CurrentCultureIgnoreCase); 16 } 17 }
上面的例子我们可以看到,测试类没有标签,我们只是标记了需要测试的方法(PS:一般系列的第一篇貌似都没什么营养)。这一篇就先到这里吧。
小北De系列文章:
《[小北De编程手记] : Selenium For C# 教程》
《[小北De编程手记]:C# 进化史》(未完成)
《[小北De编程手记]:玩转 xUnit.Net》(未完成)