unit test - 维基百科

204 阅读2分钟

单元测试

what is unit test? -- 维基百科

  1. 确保程序的部分满足程序设计,并且行为、表现符合预期
  2. 单测的目的是通过对程序的每一个独立的部分进行验证,从而确保程序的正确性。
    1. 这样就要求我们对程序进行合理的代码设计,尽量可以去独立的验证
    2. 类似linux的哲学,每一个功能就做一件事情,并且做好
  3. bottom-up测试方式:先对基础单元进行保证,然后是各个单元的组合,之后是集成测试(integration testing)将变的更有保障

基础越扎实,稳定,上层建筑越可靠。

如何划分单元

  1. procedural programming(面向过程编程)领域中,一个单元可以是整个模块(比如单个文件,或者是功能类似的一组文件),但是通常是那些独立的函数或者是过程
  2. obeject-oriented-programming(面向对象编程)领域中,通常是整个接口,比如一个class,或者是一个方法

如何进行单元测试

  1. 首先对那些最小可以测试的单元进行测试,然后对这些最小单元的组合进行测试。
  2. 设计test case:指定的输入、条件,特定的预期的结果
  3. 重点是控制测试变量,隔离外部依赖的影响
  4. 为了隔离其他依赖的问题(依赖的稳定可靠性由他们自身保证),通常我们会对依赖的对象进行mock(比如方法,对象等)

单元测试的缺点和难点

  1. 单元测试无法覆盖所有的错误,还是结合integration testE2E test
  2. 覆盖完整的测试用例需要花费一定的人力、时间成本:以bool为例,至少需要两个单测覆盖;对于编写的每一行代码通常需要3-5行的测试用例代码,而且有时候也无法收到对应付出的努力的收获
  3. 另一个难点是如何编写优秀的单元测试
  4. 持续维护单元测试,让它真正发挥作用也是非常有挑战
  5. 当方法具有输入参数和一些输出时,单元测试往往是最简单的。当方法的主要功能是与应用程序外部的东西交互时,创建单元测试并不容易