单元测试

单元测试概述。

为什么需要“单元测试”?

我写的代码还不够多,走的弯路也不够,不知道“单元测试”的好处。但是无数前辈都推崇它,必然有其中的原因。我也有理由相信,编写出好的软件是需要遵循科学的方法的。

我的一些理解是:写功能代码的时候,是站在“如何实现这个功能的角度”,有可能就会忽视一些可能发生的特殊情况。而编写测试代码的时候,就能从“可靠性”、“正确性”的角度看待问题,从而进一步完善程序。

另外,写出来的代码都是要经过测试的,不然怎么知道写的对不对?没学单元测试之前是自己编写代码测试,输出结果,人工判断是否正确。实际上单元测试对于不同的语言对应有不同的框架,JUnit 对应的是 Java,PyUnit 对应 Python,CppUnit 对应 C++,学习响应的知识可以更方便的进行测试。

黑盒测试和白盒测试

  • 黑盒测试:把整个软件看成是一个整体,而且看成是一个黑盒子,谁也看不到盒子里面是什么,只对外提供一些服务。主要是测试这些对外提供的服务的正确性。
  • 白盒测试:此时可以“看到”软件的内部结构,验证内部的方法是否如预期一样。

测试的分类

功能性测试

对于单人开发而言,最常用的是单元测试(Unit Test)–在最低的功能/参数上验证程序的正确性。还有其他的功能性测试:功能测试、集成测试、场景测试、系统测试等。功能性测试顾名思义是测试是否实现了某些功能。

非功能性测试

即使软件的基本功能没有问题,但是还需要进行很多的验证。比如验证在高负载的情况下是否正常工作。除此之外,还会验证软件的效能、兼容性、安全性等等。

其他测试

冒泡测试、回归测试(用以前的测试用例检查新的代码)以及随机进行的测试。

金老师相关的PPT

单元测试的含义

既然知道单元测试在开发中是有必要的,那么什么是单元测试呢?

单元测试是对类中方法正确性的测试。

上面这句话已经很直白了,不就是测试一个方法对不对吗?

测试一个方法对不对,通常是提供一些原始数据给类中的方法,运行得到结果 A。然后人工或者用其他方法处理原始数据,得到结果 B。最后验证结果 A 和结果 B 是否一致。

这就是单元测试的基本方法,通常我们编写的叫做测试用例:输入的数据 + 预期的结果 = 测试用例(Test Case)

总结

  • 在开发中“单元测试”是必须的
  • 一个合格的软件是需要进行各方面的测试的
  • 单元测试是对类中方法正确性的验证