• 1. 单元测试—NUnit介绍及使用
  • 2. 主题什么是单元测试? 为什么要用单元测试? 如何使用单元测试? 以Nunit为例,介绍其简单用法。 单元测试中的几种常用测试模式
  • 3. 单元测试—NUnit介绍及使用什么是单元测试?
  • 4. 单元测试—NUnit介绍及使用单元测试 单元测试是开发人员阶段完成某一功能模块,在提交给测试人员之前进行的自我测试。 一般在测试前要先把测试用例写出来,然后根据测试用例里描述的功能点进行测试,测试完后写测试报告。最终形成相对稳定的版本后发给测试人员进行功能测试或系统测试。 单元测试的目的是开发人员自己把自己程序的错误都找出来。只有自己已经找不出程序的BUG后,才提交给测试人员进行测试。
  • 5. 单元测试—NUnit介绍及使用单元测试是程序员的一项基本职责和基本技能,直接影响到程序员的工作效率和软件的质量,也直接影响到团队的合作。试想一下的情形 某程序员提交了一段未经测试的代码,另外一个程序员checkout出来后,使得本地的代码无法正常运行,花费了很长的时间才发现这是本段未经测试的代码的问题 某程序员的代码没有单元测试,过了一段时间发现程序运行异常,经过艰苦排查,发现是这段代码的问题,于是修复了漏洞;又经过了一段时间,发现了另外一个BUG,于是又修复了这个新发现的BUG;但是在修复这个BUG的时候,导致上次发现的BUG重现(当时没有发现这个问题,因为一般只是对刚刚修复的BUG作简单的测试):这是一个恶性循环,一个BUG的修复导致了另一个BUG的出现而不自觉
  • 6. 单元测试—NUnit介绍及使用为什么要用单元测试?
  • 7. 单元测试—NUnit介绍及使用单元测试的好处也是显而易见的 提升反馈速度,减少重复工作,提高开发效率 保证你的代码重构不会破坏之前代码的功能 让代码维护更容易 有助于改进代码质量的设计 帮助开发人员编写代码,提升质量、减少BUG
  • 8. 单元测试—NUnit介绍及使用如何进行单元测试?
  • 9. 单元测试—NUnit介绍及使用单元测试的内容 人工静态检查 正确性,能够实现预期的功能 清晰性,代码简明易懂,注释没有歧义 规范性,代码的格式、命名等符合公司的编码规范和代码风格 高效性,代码的执行效率尽量高 动态执行跟踪检查 所谓自动跟踪检查,是指通过单元测试工具,编写单元测试的类和方法。当执行测试类和方法时,自动对设定的输入条件进行计算,并给出测试结果
  • 10. 单元测试—NUnit介绍及使用单元测试工具—NUnit的介绍
  • 11. 单元测试—NUnit介绍及使用NUnit是一款开源的单元测试框架,供.NET开发人员做单元测试之用,内容包括配置类库、编写用于测试的类、编写测试用例 NUnit实际上就是一组类,你可以用它在你的.NET类上创建和执行自动的单元测试 使用断言来判断待测代码是否返回正确的结果,在编写测试用例的过程中,需要有一个正确的值作为依据,与测试代码返回的值进行比较 NUnit可以使你很快、很容易地对代码进行单元测试。而且它是免费的
  • 12. 单元测试—NUnit介绍及使用NUnit运行效果图1:
  • 13. 单元测试—NUnit介绍及使用NUnit运行效果图2:
  • 14. 单元测试—NUnit介绍及使用NUnit运行效果图3:
  • 15. 单元测试—NUnit介绍及使用绿色 描述目前所执行得测试都通过 黄色 意味某些测试被忽略,但是这里没有失败 红色 表示有失败
  • 16. 单元测试—NUnit介绍及使用NUnit的一些常用特性
  • 17. 单元测试—NUnit介绍及使用[TestFixture] :标记一个测试类,public和含缺省的构造函数。 [Test] :标记测试方法,public且void。 [SetUp] :在进行其他测试方法前首先被执行,用于标记公用函数。 [ExpectedException] :被标记的方法没有抛出期望的异常,测试无法通过。 [Ignore] :被标记的测试类或测试方法将被忽略。 [Category] :对测试方法进行分类标记。
  • 18. 单元测试—NUnit介绍及使用如何使用NUnit进行单元测试?
  • 19. 单元测试—NUnit介绍及使用假设代码中有一个函数 int Max(int pVal1, int pVal2) 如何来对这个函数做一个单元测试?
  • 20. 单元测试—NUnit介绍及使用第一步,为测试代码创建一个VS工程
  • 21. 单元测试—NUnit介绍及使用第二步,增加一个NUnit框架的引用
  • 22. 单元测试—NUnit介绍及使用第三步,为工程添加一个用于测试的类 为工程添加一个NUnitTest1类,我们的测试代码就放在这个类中 using NUnit.Framework; [TestFixture] Public class NUnitTest1 必须用public 来声明类 在类前使用【TestFixture】属性来标记
  • 23. 单元测试—NUnit介绍及使用第四步,为类NUnitTest1增加一个测试方法,测试代码将放到方法中 [TestFixture] Public class NUnitTest1 [Test] public void TestFunc(){} 必须用public来声明该方法 在方法前使用[Test]来标识 方法不能带任何参数,且不能有任何返回值
  • 24. 单元测试—NUnit介绍及使用示例:测试Form1类中的Max()函数 [TestFixture] public class NUnitTest1 [Test] public void TestFunc() { Form1 f = new Form1(); int actual = f.Max(12,6); Assert.AreEqual(12,actual); }
  • 25. 单元测试—NUnit介绍及使用第五步,使用NUnit进行测试
  • 26. 单元测试—NUnit介绍及使用注意的问题 TestFixture,Test,Assert是3个最基本的特征 测试类和测试方法要用public声明 测试方法不能带任何参数,且不能有返回值
  • 27. 单元测试—NUnit介绍及使用NUnit与NCover的整合使用
  • 28. 单元测试—NUnit介绍及使用单元测试作为重要质量保证手段,可以保证开发过程中的代码稳定性,但是如何知道有多少代码是经过单元测试的呢?
  • 29. 单元测试—NUnit介绍及使用NCover(代码单元测试覆盖率分析工具) 判断哪些代码进行了单元测试,哪些代码没有进行单元测试,从而判断测试的覆盖面是否足够广泛,同时监视代码的执行情况,报告每行代码的执行次数
  • 30. 单元测试—NUnit介绍及使用如何来分析NUnit单元测试代码的覆盖率 在命令行执行: ncover.console NUnit所在路径\nunit-console.exe 要分析的目标执行程序名 如: NCover.Console D:\Program Files\Nunit\nunit-console E:\Test\Test1\bin\Debug\Test1.exe
  • 31. 单元测试—NUnit介绍及使用如何监视代码的执行情况,报告每行代码执行测试 在命令行执行: Ncover.console 监视的执行程序名 //x xml文件名 如: NCover.Console E:\Test\Test1\bin\Debug\Test1.exe D:\\testreport.xm
  • 32. 单元测试中常用测试模式1 准备、执行、断言(Arrange、Act、Assert) 1)准备测试环境,测试数据等 2)执行被测试方法 3)用断言来验证执行结果
  • 33. 单元测试中常用测试模式2 构造函数测试 这种模式适合对类中某些特殊的属性进行测试,被测的属性都有一个特点—它们都是不变量;例如数据的初始化以后,其容量是不会变化的,无论这个数组对象对什么样的外部方法调用。 1)创建一个实例 2)对该实例进行外部调用 3)用断言来执行验证结果
  • 34. 单元测试中常用测试模式3 反向关联(Roundtrip) 这种模式适合于被测方法有一个可逆方法的情况下使用。它的数学证明是:f-(f(x)) = x
  • 35. 单元测试中常用测试模式4状态关联 这种模式很常见,就是对于调用某个类得方法,会改变这个类内部的状态,而这个改变可以用其他方法来间接地验证。
  • 36. 单元测试中常用测试模式5异常允许 如果需要测试异常是否在适当的时候抛出时,应该应用该模式。
  • 37. Thanks!