教你如何写单元测试的书有很多, 但是为什么要写单元测试呢? 这个知乎帖子中 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. 单元测试的好处? 评价一个好的单元测试的标准
单元测试使工作完成的更轻松
单元测试使你的设计更好
可以大大减少花在调试上的时间
能帮助你更好的理解代码
邹欣老师构建之法的第 2 章内容中讲过有关评价好的单元测试的标准, 我觉得写的别全面, 大家可以认真了解一下
我认为, 单元测试确实是好东西, 但是, 能够进行单元测试的代码, 首先必须要面向对象足够强, 才能够很好的进行单元测试其次, 如果面对复杂的逻辑编写的单元测试, 当需求改变时, 不仅需要修改代码, 还要修改单元测试代码, 这就需要同时维护两套代码, 工作量巨大, 那么单元测试是否需要写呢, 我还是很疑惑或许框架性的代码, 是最适合做单元测试的, 价值很高, 覆盖率也高
5. 写在最后越学习发现自己会的越少
来源: https://www.cnblogs.com/joyce4/p/8617558.html