[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则会自动安装。在工具栏==测试==窗口==测试资源管理器打开。
  对于NUnit,点击http://nunit.org/?p=download,下载安装即可。
  编码
  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。

TAG: 测试 单元测试

 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

日历

« 2019-10-15  
  12345
6789101112
13141516171819
20212223242526
2728293031  

我的存档

数据统计

  • 访问量: 10176
  • 日志数: 42
  • 建立时间: 2018-11-01
  • 更新时间: 2018-11-06

RSS订阅

Open Toolbar