单元测试的定义:
单元测试是指,对软件中的最小可测试单元在与程序其他部分相隔离的情况下进行检查和验证的工作,这里的最小可测试单元通常是指函数或者类。
给定输入测试代码段的响应:
测试输入可以包括:
-
被测试函数的输入参数; -
被测试函数内部需要读取的全局静态变量; -
被测试函数内部需要读取的成员变量; -
函数内部调用子函数获得的数据; -
函数内部调用子函数改写的数据; -
嵌入式系统中,在中断调用时改写的数据; -
…
预期输出:
-
被测试函数的返回值; -
被测试函数的输出参数; -
被测试函数所改写的成员变量; -
被测试函数所改写的全局变量; -
被测试函数中进行的文件更新; -
被测试函数中进行的数据库更新; -
被测试函数中进行的消息队列更新; -
…
驱动代码是用来调用被测函数的,而桩代码和 Mock 代码是用来代替被测函数调用的真实代码的。
Mock 代码和桩代码的本质区别是:测试期待结果的验证(Assert and Expectiation)。
对于 Mock 代码来说,我们的关注点是 Mock 方法有没有被调用,以什么样的参数被调用,被调用的次数,以及多个 Mock 函数的先后调用顺序。所以,在使用 Mock 代码的测试中,对于结果的验证(也就是 assert),通常出现在 Mock 函数中。
对于桩代码来说,我们的关注点是利用 Stub 来控制被测函数的执行路径,不会去关注 Stub 是否被调用以及怎么样被调用。所以,你在使用 Stub 的测试中,对于结果的验证(也就是 assert),通常出现在驱动代码中。
Java 最常用的单元测试框架是 Junit 和 TestNG;C/C++ 最常用的单元测试框架是 CppTest 和 Parasoft C/C++test;框架选型完成后,你还需要对桩代码框架和 Mock 代码框架选型,选型的主要依据是开发所采用的具体技术栈。 通常,单元测试框架、桩代码 /Mock 代码的选型工作由开发架构师和测试架构师共同决定。
Java 的 JaCoCo------->代码测试覆盖率统计工具
|