|
@@ -0,0 +1,118 @@ |
|
|
|
|
|
# 单元测试相关知识点 |
|
|
|
|
|
## 单元测试 |
|
|
|
|
|
|
|
|
|
|
|
### 1.1概念 |
|
|
|
|
|
|
|
|
|
|
|
> 对软件中的最小可测试单元进行检查和验证 |
|
|
|
|
|
|
|
|
|
|
|
### 1.2单元测试创建 |
|
|
|
|
|
|
|
|
|
|
|
* 创建一个简单的程序 |
|
|
|
|
|
|
|
|
|
|
|
 |
|
|
|
|
|
|
|
|
|
|
|
2. 创建测试程序 |
|
|
|
|
|
|
|
|
|
|
|
创建项目----选择本机单元测试---配置创建 |
|
|
|
|
|
|
|
|
|
|
|
 |
|
|
|
|
|
|
|
|
|
|
|
3. 添加要测试项目 |
|
|
|
|
|
|
|
|
|
|
|
右键项目---添加--现有项----添加.obj文件。 |
|
|
|
|
|
|
|
|
|
|
|
 |
|
|
|
|
|
|
|
|
|
|
|
在测试项目的属性中(配置依赖): |
|
|
|
|
|
|
|
|
|
|
|
- **C/C++ → 常规 → 附加包含目录**:添加主项目的头文件路径 |
|
|
|
|
|
- **链接器 → 输入 → 附加依赖项**:添加主项目生成的 `.lib` 文件 |
|
|
|
|
|
|
|
|
|
|
|
4. 添加被测项目头文件 |
|
|
|
|
|
|
|
|
|
|
|
实现一个简单的测试 |
|
|
|
|
|
 |
|
|
|
|
|
|
|
|
|
|
|
~~~ cpp |
|
|
|
|
|
使用断言判断函数是否执行正确 |
|
|
|
|
|
TEST_METHOD(TestMethod1) |
|
|
|
|
|
{ |
|
|
|
|
|
int a = 2; |
|
|
|
|
|
int b = 8; |
|
|
|
|
|
int sum = 20; |
|
|
|
|
|
//断言判断结果是否未为20 |
|
|
|
|
|
Assert::AreEqual(sum, add_multiplied(a, b)); |
|
|
|
|
|
} |
|
|
|
|
|
~~~ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### 1.3代码覆盖度 |
|
|
|
|
|
|
|
|
|
|
|
下载使用OpenCppCoverage进行分析 |
|
|
|
|
|
|
|
|
|
|
|
插件配置 |
|
|
|
|
|
|
|
|
|
|
|
* 添加exe文件路径 |
|
|
|
|
|
|
|
|
|
|
|
* 添加被测工程.dll |
|
|
|
|
|
|
|
|
|
|
|
 |
|
|
|
|
|
|
|
|
|
|
|
 |
|
|
|
|
|
|
|
|
|
|
|
需要下载支持2022的插件[下载链接](https://blog.csdn.net/2401_82413779/article/details/144130460?ops_request_misc=&request_id=&biz_id=102&utm_term=OpenCppCoverage.exe%E5%9C%A8%20vs%E4%B8%AD%E4%BD%BF%E7%94%A8&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-6-144130460.142^v102^pc_search_result_base1&spm=1018.2226.3001.4187) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### 1.4 运行性能 |
|
|
|
|
|
|
|
|
|
|
|
* 计算函数耗时 |
|
|
|
|
|
|
|
|
|
|
|
~~~ c++ |
|
|
|
|
|
//引入#include <chrono> |
|
|
|
|
|
|
|
|
|
|
|
TEST_METHOD(TestMethodPerformance) |
|
|
|
|
|
{ |
|
|
|
|
|
int a = 2; |
|
|
|
|
|
int b = 8; |
|
|
|
|
|
// 记录开始时间 |
|
|
|
|
|
auto start = std::chrono::high_resolution_clock::now(); |
|
|
|
|
|
|
|
|
|
|
|
// 执行被测函数 |
|
|
|
|
|
int result = add_multiplied(a, b); |
|
|
|
|
|
|
|
|
|
|
|
// 记录结束时间 |
|
|
|
|
|
auto end = std::chrono::high_resolution_clock::now(); |
|
|
|
|
|
|
|
|
|
|
|
// 计算时间差(以毫秒为单位) |
|
|
|
|
|
std::chrono::duration<double, std::milli> elapsed = end - start; |
|
|
|
|
|
|
|
|
|
|
|
// 输出执行时间(在VS的输出窗口中可见) |
|
|
|
|
|
Logger::WriteMessage(("Execution time: " + std::to_string(elapsed.count()) + " ms").c_str()); |
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
~~~ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### 1.5测试单元样例书写 |
|
|
|
|
|
|
|
|
|
|
|
### 1.6 单元测试 |
|
|
|
|
|
|
|
|
|
|
|
1. 设置断点 |
|
|
|
|
|
2. 启动调试 |
|
|
|
|
|
3. 继续--单步执行--单步进入--跳出 |
|
|
|
|
|
4. 查看数据 |
|
|
|
|
|
1. 局部变量 |
|
|
|
|
|
2. 监视表达式 |
|
|
|
|
|
3. 调用堆栈 |
|
|
|
|
|
|
|
|
|
|
|
* 多线程调试 |
|
|
|
|
|
|
|
|
|
|
|
* 内存调试 |
|
|
|
|
|
|