三、开始使用框架进行基础的单元测试
3.1、单元测试框架的作用
单元测试框架是帮助开发人员进行单元测试的代码库和模块。
3.2、NUnit
NUnit 是一套开源的基于.NET平台的类Xunit白盒测试架构,支持所有的.NET平台。这套架构的特点是开源,使用方便,功能齐全。很适合作为.NET语言开发的产品模块的白盒测试框架。
起初是从流行的Java单元测试框架JUnit直接移植过来的,之后NUnit在设计和可用性上做了极大地改进,和JUnit有了很大的区别,给日新月异的测试框架生态系统注入了新的活力。
如何在VS安装并运行呢?用Nuget是最方便的一种形式了,如下图:
3.3、编写第一个单元测试
(1)假定我们要测试下面这段代码:
public class LogAnalyzer { public bool IsValidLogFileName(string fileName) { if (fileName.EndsWith(".SLF")) { return false; } return true; } } |
这个方法是用来检查文件扩展名的,以此判断是否是一个有效的文件。在上面的程序中,故意在if条件语句中少了一个‘!’号,这样,我们可以看到测试失败时在测试运行期间会显示什么内容。
(2)新建一个类库项目,名称最好为[ProjectUnderTest].UnitTests;并添加一个类,类型为[ClassName]Tests的类;在类中就可以写测试方法,一般测试方法是这样子来命名的:[UnitOfWorkName]_[ScenarioUnderTest]_[ExceptedBehavior]。
(3)我们需要明确的是如何编写测试代码,一般来说,一个单元测试包含三个行为:
① 准备(Arrange)对象,创建对象,进行必要的设置;
② 操作(Act)对象;
③ 断言(Assert)某件事情是预期的;
(4)根据以上步骤,编写第一个单元测试方法
[TestFixture] public class LogAnalyzerTests { [Test] public void IsValidFileName_BadExtension_ReturnsFalse() { LogAnalyzer analyzer = new LogAnalyzer(); bool result = analyzer.IsValidLogFileName("filewithbadextension.foo"); Assert.AreEqual(false, result); } } |
其中,属性[TestFixture]:标识这个类是一个包含自动化NUnit测试的类和[Test]:标识这个方法是一个需要调用的自动化测试是NUnit的特有属性,NUnit用属性机制来识别和加载测试。
3.4、运行过程与结果
从上图可以看出,测试方法并没有通过,我们期望(Expected)的结果是False,而实际(Actual)的结果却是True。并且还帮你指出了行号。