您现在的位置是:KOK球盘体育 > 单元作文 >

单元测试可测试程序员代码编写的正确性如何使

2020-04-30 14:04单元作文 人已围观

简介林书豪单元测试是指编写代码来验证开发者编写代码的正确性,一般单元测试也是由开发者完成的,自已开发单元测试代码来检查自己编写代码的通过性。 定义:单元测试是开发人员编写的、...

  单元测试是指编写代码来验证开发者编写代码的正确性,一般单元测试也是由开发者完成的,自已开发单元测试代码来检查自己编写代码的通过性。

  定义:单元测试是开发人员编写的、用于检测在特定条件下目标代码正确性的代码,单元测试是代码级别的测试。

  做为一个合格的序开发者,单元测试是必须具备的技能,一个稍复杂的软件项目,存在多种情况的路径执行代码,如果没有一一全部验证过,就不能保证自己开发的代码100%没有问题。

  因此,我们要对自己开发的代码负责任,BUG先在自己这里消灭掉,让自己提交的代码质量非常高,这样也能让自己的编程生涯更有自信。

  在Visual Studio 2019中内置了多种测试工具,这里我们使用基于.NET Framework的单元测试项目来测试代码。

  单元测试是以项目的方式存在的,与应用程序项目结合在一起对代码进行单元测试,保证每开发一个方法都是经过测试的合格程序。

  这里我们使用微软提供的单元测试项目,来测试C#语言编写的代码,详细讲解一下如何创建单元测试项目、编写C#代码、编写测试代码和测试C#方法的结果。

  首先创建一个名称为:Yidosoft.Edu.Csharp.UnitTest的.NET控制台应用程序,然后再创建一个基于该控制台项目的单元测试项目,用于对控制台应用程序代码的测试。

  图1中的“Yidosoft.Edu.Csharp.UnitTest”是一个控制台应用程序项目。然后点击“新建项目”,如图2所示:

  在图2中选择“单元测试项目(.NET Framework)”,点击“下一步”按钮,如图3所示:

  当测试项目创建完成之后,还要添加具体要测试哪个应用程序项目的代码,需要添加该应用程序项目的引用:

  在图6左侧的“项目”中选择“Yidosoft.Edu.Csharp.UnitTest”控制台应用程序项目,点击“确定”按钮。如图7所示:

  在图7中,已看到控制台应用程序项目的程序集已添加到单元测试项目的“引用”中了。

  下面我们在控制台应用程序:Yidosoft.Edu.Csharp.UnitTest的Main()方法中编写一行C#代码,用于向控制台输出一段文本内容:

  在图8中,只是在Main()方法中输出一段文本内容,非常简单的一段代码,

  那现在我们不想运行此控制台应程序,就能够保证Main()方法中的代码就能输出“你好,小强。”Mian()方法无参数。

  要想实现在不运行程序的情况下,就能够保证编写的方法逻辑是正确的,可以使用单元测试来完成。

  注意:图8的Program类和Main()要使用public访问修饰符,因为此项目要在测试项目中使用,属于公开访问。

  由于Program类中的Main()方法是向控制台写入(显示)文本,写入之后我们就能看到文本内容了。

  (1). 定义了一个string类型的变量,用于存放我们测试的预期值,最终正确的结果。这里就是测试Main()方法向控制台写入的是否是此文本内容。

  (4). Main()方法是静态方法,直接使用类名.方法名()访问,表示这是一个输出操作,与SetOut()配合。

  (5). 此时sw对象就是Main()方法执行的结果了,就是输出的文本内容。

  (6). 使用Assert.AreEqual()比较Main()方法执行的结果与我们指定的expected变量的值是否相等,如果相等,则测试成功,说明Main()方法逻辑没有问题。

  单元测试代码编写完成之后,就可以运行了,运行C#测试代码,查看是否全部通过,如果全部通过,表示测试通过,说明开发者编写的代码没有问题。

  在VS2019中,可以非常方便的运行单元测试,找到顶部工具栏的“测试”菜单,如图11所示:

  在图11中依次点击“测试”à“Windows”à“测试资源管理器”,打开“测试资源管理器”,如图12所示:

  图12左侧红线框住的就是“测试资源管理器”,其中带有感叹号的表示未运行单元测试。

  在图12中点击第一个“绿色的播放”,此按钮是“全部运行”按钮,快捷键是Ctrl+R+A,旁边第二个“绿色播放”是“运行所选测试”按钮。

  在图14中,当出现了打对号的图标,表示测试全部通过,并且在测试方法TestMethod1()上也出现了打对号的小图标,林书豪表示此测试方法运行成功,测试的代码已通过测试。

  在图15中,我们设置的预期值变成了“你好,小花。”,再次全部运行一下单元测试:

  图16的单元测试失败了,因为测试的Main()方法输出的结果与我们的预期值不一样,所以需要修改一下Main()方法:

  在图17中,将Main()方法中的“小强”修改为“小花”,再运行一下单元测试:

  图18的测试结果全部通过了,并且测试的Main()方法上还显示“通过”字样。

  在上面我们测试的是Main()方法,该方法是C#静态方法,且无参数,无返回类型。现在我们来测试一个非静态方法,不仅带有参数,还具有返回类型。

  图19是一个非常简单的实例方法GetData(),该方法返回类型是string,参数是string类型的name,返回一行简单的文本内容。

  (1). 对于带参数的方法,最重要的就是实际参数值,传入不同的实际参数值,返回的结果也是不一样的。

  (5). var类型的result是方法返回的实际结果值,并将name参数传入。

  (6). 最后使用Assert.AreEqual()方法比较预期值和实际值是否相等,如果相等,则测试通过。

  从图21上看,TestMethod2()测试方法具有绿色的对勾,表示测试通过,说明GetData()方法的功能逻辑代码是正确的。

  (1). 有效代码重构:重构是指在不改变软件系统外部行为的前提下,改善它的内部结构,目的是防止因需求变化而对程序修改带来越来越多的BUG,通过重构造调整内部结构,从而能够适应各种修改。

  如果单元测试做的好,则重构后运行一遍单元测试,如果未发现新的BUG,表示这次重构很成功,测试为先,持续重构作为良好开发习惯被越来越多的人所采纳。

  (2). 优化设计:可能为了更好的单元测试,去优化设计,并可解除大量的耦合。

  (3). 持久使用:一次编写单元测试,后期一下可用,并且可记录每次的测试记录。

  (4). 快速测试:不需部署到设备上,快速测试结果,保证部署不会有问题。

Tags: 林书豪 

本栏推荐

标签云

站点信息

  • 文章统计3580篇文章
  • 标签管理标签云
  • 微信公众号:扫描二维码,关注我们