[Test]单元测试艺术(1)基础知识
上一篇 /
下一篇 2018-11-06 09:40:39
/ 个人分类:单元测试
本系列将分成3节:
打破依赖,使用模拟对象,桩对象,测试框架
创建优秀的单元测试
单元测试与集成测试
单元测试几乎总是基于框架来写的,因为框架可以为我们提供统一的API来管理测试。
常用的框架有UnitTest(MSTest),NUnit(开源)
定义
单元测试是一段代码调用另一段代码,随后检验一些假设的正确性。(单元指的是一个方法或函数)
集成测试是指把2个或多个互相依赖的软件模块作为一组进行测试。
优秀的单元测试准则
1、自动的,可重复
2、容易实现
3、持续可用
4、简单
5、快速
测试驱动(TDD)开发
对于TDD确切的含义,有很多不同的观点,有人觉得就是测试优先的开发,有人觉得意味着大量的测试,有人觉得是一种设计方法。
TDD的流程:
写测试写代码重构写下一个测试
它显示了TDD是增量性质的,每次一小步,最终完成高质量的软件。(重构可以在完成每个测试后进行,也可以在完成几个测试后进行。重构是非常有价值意义的。)
TDD的优点:
1、较高的代码测试覆盖率
2、测试是可信赖的
3、辅助设计,减少代码复杂度
MSTest和NUnit
所有的测试框架都共享相同的核心特性:TestDeclaration,TestExecution,andAssertions.
在.Net中一般使用特性标签来添加额外的信息,下面就是MSTest和NUnit在特性标签上不同的地方。
第一个单元测试
安装
对于MSTest,只要安装VS则会自动安装。在工具栏==测试==窗口==测试资源管理器打开。
编码
1、配置对象
2、操作对象
3、断言结果
[TestClass]publicclassBlogTests
{publicDbContext Db {get;set; }///<summary>///每个测试方法执行前都会执行///</summary>[TestInitialize]publicvoidInit()
{//1 配置对象Db =newDbContext();
}
[TestMethod]publicvoidTestAdd()
{varblog =newBlog { Title ="单元测试的艺术", Content ="单元测试是一门艺术"};//2 操作对象Db.Add(blog);//3 断言结果Assert.IsTrue(blog.Id >0);
}///<summary>///每个测试方法执行后都会执行///</summary>[TestCleanup]publicvoidClean()
{
Db=null;
}
} |
异常的测试
有时候,测试里面上需要抛出异常,这是业务上的正确性。在单元测试里,也有对应特性用来实现。如
[ExpectedException(typeof(OutOfMemoryException), AllowDerivedTypes =true)]//默认异常的子类也会不通过测试的[TestMethod]publicvoidTestAdd()
{varblog =newBlog { Title ="单元测试的艺术", Content ="单元测试是一门艺术"};//2 操作对象Db.Add(blog);thrownewOutOfMemoryException();//3 断言结果Assert.IsTrue(blog.Id >0);
} |
忽略的测试
有时候,测试写的有问题,代码没问题。我们可以暂时忽略该测试
[Ignore]
[TestMethod]publicvoidTestAdd()
{varblog =newBlog { Title ="单元测试的艺术", Content ="单元测试是一门艺术"};//2 操作对象Db.Add(blog);thrownewOutOfMemoryException();//3 断言结果Assert.IsTrue(blog.Id >0);
} |
对测试分组
当我们只想测试某一类测试的时候,也有对应的特性
[TestCategory("change db")]
[TestMethod]publicvoidTestAdd()
{varblog =newBlog { Title ="单元测试的艺术", Content ="单元测试是一门艺术"};//2 操作对象Db.Add(blog);//3 断言结果Assert.IsTrue(blog.Id >0);
}
[TestCategory("no change")]
[TestMethod]publicvoidTestRead()
{//2 操作对象varblogs =Db.GetBlogs();//3 断言结果Assert.IsTrue(blogs.Length >0);
} |
运行选定的测试即可
测试
命名规范
备注:SUT("systemundertest")代表被测系统,有些人喜欢CUT("codeundertest")。通常SUT。
相关阅读:
- 对 Vue-Router 进行单元测试 (旺达, 2018-11-05)
- 持续集成CI与自动化测试 (空白格--, 2018-11-05)
- Visual Studio 2008单元测试(1)_开篇 (空白格--, 2018-11-05)
- 一线互联网常见的14个Java面试题,你颤抖了吗程序员 (空白格--, 2018-11-05)
- 项目管理-质量管理 (空白格--, 2018-11-05)
- 如何确保用例模型有效? (空白格--, 2018-11-06)
- 缺陷管理规范—bug类型 (空白格--, 2018-11-05)
- VisualStudio2008单元测试(2)_WEB测试 (空白格--, 2018-11-05)
- 如何建立软件测试管理体系? (空白格--, 2018-11-05)
- 常用功能-查询功能测试点 (空白格--, 2018-11-06)
收藏
举报
TAG:
测试
单元测试