【扫盲】单元测试中的几个重要概念

1. 单元测试的基本点:

条件分支循环处理函数调用

2. 单元测试用例“输入数据”的种类:

被测试函数的输入参数;
被测试函数内部需要读取的全局静态变量;
被测试函数内部需要读取的成员变量;
函数内部调用子函数获得的数据;
函数内部调用子函数改写的数据;
嵌入式系统中,在中断调用时改写的数据

3. 单元测试用例“预计输出”的种类:

被测试函数的返回值;
被测试函数的输出参数;
被测试函数所改写的成员变量;
被测试函数所改写的全局变量;
被测试函数中进行的文件更新;
被测试函数中进行的数据库更新;
被测试函数中进行的消息队列更新;

4. 驱动代码,桩代码和 Mock

  • 驱动代码用来调用被测函数,
    桩代码和 Mock 代码是临时代码(用来代替被测函数所调用的真实代码)
  • 驱动模块包括3个步骤:调用被测函数前的数据准备、调用被测函数、验证相关结果
  • 桩代码:某个函数 A 的内部实现中调用了一个尚未实现的函数 B,为了对函数 A 的逻辑进行测试,那么就需要模拟一个函数 B,这个模拟的函数 B 的实现就是所谓的桩代码。
  • 编写桩代码要遵守的3个原则:
    ① 桩函数要具有与原函数完全相同的原形,仅仅是内部实现不同,这样测试代码才能正确链接到桩函数;
    ② 用于实现隔离和补齐的桩函数比较简单,只需保持原函数的声明,加一个空的实现,目的是通过编译链接;
    ③ 实现控制功能的桩函数是应用最广泛的,要根据测试用例的需要,输出合适的数据作为被测函数的内部输入。
  • Mock 代码和桩代码的本质区别:
    测试期待结果的验证(Assert and Expectiation)。

5. 实际软件项目中单元测试的开展

  • 只有底层模块或者核心模块的测试中才会采用单元测试。
  • 确定单元测试框架的选型。
    (Java 最常用的单元测试框架是 Junit 和 TestNG;C/C++ 最常用的单元测试框架是 CppTest 和 Parasoft C/C++test;)
  • 对桩代码框架和 Mock 代码框架选型,主要依据开发所采用的具体技术栈。
    (通常单元测试框架、桩代码 /Mock 代码的选型工作由开发架构师和测试架构师共同决定。)
  • 引入计算代码覆盖率的工具(以衡量单元测试的代码覆盖率)。
    Java 的 代码覆盖率统计工具有JaCoCo,JavaScript 的 Istanbul
  • 把单元测试执行、代码覆盖率统计和持续集成流水线做集成,以确保每次代码递交,都会自动触发单元测试,并在单元测试执行过程中自动统计代码覆盖率。
    最终以“单元测试通过率”和“代码覆盖率”为标准来决定本次代码递交是否能够被接受。

你可能感兴趣的:(【扫盲】单元测试中的几个重要概念)