单元测试相关——入门级说明书

发表于:2018-3-26 10:21

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:明眸善睐    来源:博客园

  如果你是一个对单元测试懵懵懂懂的小白,那么很好,接下来你可以考虑继续看看这篇我花了三天的时间认真用心总结出来的文章了,但是如果你是一个技术大神,希望您看完这篇文章后给我提出宝贵的建议,也可以尽情吐槽我的无知啦。
  目录
  1. 我所理解的单元测试——为什么要写单元测试?
  2. 开发工具 艰难坎坷的新尝试——vs2017
  3. 众多单元测试工具该如何选择——很头疼
  4. 单元测试的好处——判断好的单元测试的标准
  5. 写在最后——越学习发现自己会的越少
  我相信应该会有一部分人跟我一样,以前会听过大家在说“单元测试”这个词,但是一直都没有真正弄懂什么是单元测试吧,以前可能听说过可以写test.h加到cpp中,但是每次一修改就要更换测试。这两天我也百度了一些资料,发现很多都是直接讲单元测试的好处,之后就开始写代码和例子,我看的一塌糊涂,究根结底,为什么一个测试要写这么多代码呢?
  1.官方解释与我所理解的单元测试
  首先我们百度一下单元测试的含义,总结一下:单元测试就是开发者编写的一小段代码,对软件中的最小可测试单元进行检查和验证,看这个很小的、很明确的功能是否正确。那这个最小可测试单元是什么?这要根据实际情况去判定其具体含义,如C语言中单元指一个函数,Java里单元指一个类等等。详情指路百度百科。
  教你如何写单元测试的书有很多,但是为什么要写单元测试呢?这个知乎帖子中 coolhappya答主的回答让我豁然开朗。
  如果不愿意细看,可以看下我在这里简单总结的我所理解的单元测试:
  代码的终极目标有两个,第一个是实现需求,第二个是提高代码质量和可维护性。
  单元测试是为了提高代码质量和可维护性,是实现代码的第二个目标的一种方法。
  那什么时候需要写单元测试呢?举几个例子:
  1.假设你的第一个程序是Hello World,任何一个语言实现这个程序都只需要不到5行代码。这个程序需要单元测试吗?
  答:这个时候让你去写单元测试,你会觉得那纯粹是浪费时间,更改功能是轻而易举的事情。
  2.给学校开发一个图书管理系统,可能会有1000行,这个系统需要单元测试吗?
  答:需求你可以满足,代码也能很好地被模块化,每个功能的更改似乎也没有那么大麻烦。似乎写单元测试要浪费额外的功夫,而且也没感觉到有多少好处,那就看心情吧,可写可不写。
  3.如果让你为一家大的电商公司做一个库存管理系统,总代码达到了惊人的20000行。
  答:如果这个复杂系统是由1950个函数和方法组成,想要确定系统整体没有BUG,就等同于确定组成这个系统的1950个函数和方法没有BUG。而单元测试就是做这个事情的,显而易见,如果你写了单元测试,并且每个函数都通过了,这个系统起码在代码角度就是没有BUG的。
  从绝对的角度说,单元测试很重要,但是,从相对的角度来讲,小的代码量会让单元测试显得不那么重要,所以很多人感受不到单元测试的重要性,也可能的确不用写单元测试。但是在大多数的时候,单元测试对已有代码的威力简直可怕。
  所以是否要写单元测试这个问题显然有了答案了。
  2. 开发工具 艰难坎坷的新尝试——vs2017
  在选择开发工具这里我纠结了一下,因为之前在安卓移动开发课上安装过Eclipse,接触过一点Java语言,老师在这里也给出了一篇关于Java语言的单元测试框架Junit的具体使用安装方法。这篇文章将 Junit的使用步骤、demo的测试和完善也已经一步一步详细地给出了,大家可以看一下。因为我本身对于Java语言学的不深,再者可能想要尝试一些新事物,所以综合一下,我这次决定自己挑战一下针对C#或C++语言的开发工具Visual Studio。
  决定了我的选择之后我便兴致满满、摩拳擦掌。接下来一个又一个困难让我无语凝噎。
  首先是安装,这个软件特别的大,想要使用的人需要有耐心等待下载和安装过程了。附上安装教程。
  Visual studio之前想安装2015版的,但是去官网看现在已经是2017的新版了,而且还是可以免费下载,下载下来注册一个微软账号,然后在visual studio installer中选择你想要安装的工具。这些教程中都有,注意安装的时候选一个地方大一些的盘就可以了,过程比较慢,需要耐心等待。
  附几张我安装时的图片:




  安装成功就可以新建项目了,C++和C#等都可以和以前的软件一样使用了。如果有不会用的话再放一个使用VS2017编写C++程序的教程链接使用VS2017编写C++程序的教程链接。
  3.令人眼花缭乱 多种多样的单元测试选择
  由于老师已经给出了Junit工具的使用方法,而我安装的又是vs2017,所以接下来的就是寻找单元测试工具了。这两天我也简单地了解了一下,对于C++语言来说,经典的单元测试框架有很多,如GoogleTest, cppunit之类,但是在我了解的过程中,发现这些框架需要很多时间去学习,需要花很多时间和精力去学习使用,即使是一个非常非常小的项目,也要配置半天。
  比如cppunit, 它就是xUnit的成员之一。讲到这里,xUnit的成员有很多,如JUnit,NUnit,PythonUnit,HtmlUnit,HttpUnit等。CppUnit就是一个专门面向C++的单元测试框架。但是我发现网上的文章讲的大多都是在VC6环境下配置的,这就又是一个大难题了,我只好放弃这个测试工具。放个链接,有需要的可以看看。
  至于Gtest的话,看了一下这个链接觉得如果短短这两天时间可能还是学不会,我也抛弃了它。
  在邹欣老师构建之法第2章的内容中,这里也有写到了用VSTS写单元测试。
  还有一个新兴的单元测试框架:Catch 。据说特别简单,它简单到什么程度?只需要引入一个头文件即可,非常简单轻巧,把这两个简短的教程1和教程2看一遍,基本就掌握了
  关于我安装的vs2017,查阅资料发现有可以进行单元测试的第三方插件,这真的是让我开心的事情了。vs提供了一个扩展插件工具市场,里面有许多第三方的插件,我使用了最经典XUnit 单元测试框架——Nunit。这里选择Nuint3版本,比较新,支持2017。需要下载三个插件,分别是Nunit3测试适配器、Nunit 3测试模块、Nunit 3 扩展,用这些可以直接生成单元测试。其中的步骤可以按照这个链接——Visual Studio 2017优雅单元测试来做。
  还有这个链接 ,是教你如何在Visual Studio 2017 上对 C++ 进行单元测试。
  在实践过程中我还遇到了一个问题,就是右键想要测试的类发现并没有创建单元测试这一个选项,这个问题该如何解决呢,这里我百度了一下发现可能是右键创建单元测试功能被隐藏了,如果你也出现了这个问题,可以按照这个文章所说的打开创建单元测试功能。再之后就很顺利的创建测试项目和单元测试文件了。这里也放两张我的过程截图吧。







  4.单元测试的好处?评价一个好的单元测试的标准
  单元测试使工作完成的更轻松
  单元测试使你的设计更好
  可以大大减少花在调试上的时间
  能帮助你更好的理解代码。
  我认为,单元测试确实是好东西,但是,能够进行单元测试的代码,首先必须要面向对象足够强,才能够很好的进行单元测试。其次,如果面对复杂的逻辑编写的单元测试,当需求改变时,不仅需要修改代码,还要修改单元测试代码,这就需要同时维护两套代码,工作量巨大,那么单元测试是否需要写呢,我还是很疑惑。或许框架性的代码,是最适合做单元测试的,价值很高,覆盖率也高。
  5.写在最后——越学习发现自己会的越少
  第一次写这种博客真的十分烧脑,一个对于单元测试完全小白的我用了三天多的时间查阅了各种资料,从认知了解单元测试是什么,到如何找到适合的单元测试工具,如何使用它等各个方面,写下了这份说明书,希望能给其他小白们提供一点帮助。不得不说在这个过程中我成长了很多,以前对于知识总是很随意,这次就想仔细研究,虽然累但是很舒服,对于单元测试这个小领域也算是有了一丁点儿的了解,以后有时间还会继续学习,争取再把这篇博客完善一下。可能我写的会有欠缺的地方,希望众大神们能够提出宝贵的建议,多多包容啦。



上文内容不用于商业目的,如涉及知识产权问题,请权利人联系博为峰小编(021-64471599-8017),我们将立即处理。
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号