# 单元测试相关知识点

## 概念

- 单元测试（unit testing），是指对软件中的最小可测试单元进行检查和验证。编写单元测试是用来验证这段代码的行为是否与我们期望的一致。

## 单元测试
- 单元测试创建

  - 启动Visual Studio

    首先，打开Visual Studio并创建一个新的解决方案或打开现有的解决方案。确保你的项目已经准备好进行测试。

  - 添加测试项目

  - 在解决方案资源管理器中，右键点击解决方案名称，选择“添加” -> “新建项目”。在弹出的对话框中，选择“测试”类别，然后选择“单元测试项目”。为测试项目命名并点击“创建”。

  - 引用被测试项目

    在新创建的测试项目中，右键点击“引用”并选择“添加引用”。在弹出的对话框中，选择你的主要项目，这样测试项目就能访问主要项目中的类和方法。

- 代码覆盖度

  1. 行覆盖

     行覆盖（又叫语句覆盖）就是通过设计一定量的测试用例，保证被测试的方法每一行代码都会被执行一遍。

  2. 分支覆盖

     判定覆盖的含义就是代码里每一个判定都要走一次true，一次false。

  3. 条件覆盖

     条件覆盖和判定覆盖类似，不过判定覆盖着眼于整个判定语句，而条件覆盖则着眼于某个判断条件，条件覆盖需要保证每个判断条件的true false都要覆盖到，而不是整个判定语句。

  4. 路径覆盖

     ![image-20250711131114258](./pictures/image-20250711131114258.png)

     路径覆盖这个顾名思义就是覆盖所有可能执行的路径。

     ```
     路径1：1->3->5;
      
     路径2：1->2->5;
      
     路径3: 1->3->4;
      
     路径4: 1->2->4;
     ```

- 运行性能

  ![image-20250710140456749](./pictures/image-20250710140456749.png)

- 测试样例书写

  ![image-20250710140237090](./pictures/image-20250710140237090.png)

  在该代码框架内写单元测试的程序。

- 单元测试的调试

  ![image-20250710140347052](./pictures/image-20250710140347052.png)

![image-20250711131643794](./pictures/image-20250711131643794.png)

**常见的断言**

| 函数名                      | 说明                           | 示例                                 |
| :-------------------------: | :------------------------------: | :------------------------------------: |
| `Assert::IsTrue(x)`         | 判断表达式为 true              | `Assert::IsTrue(5 > 2);`             |
| `Assert::IsFalse(x)`        | 判断表达式为 false             | `Assert::IsFalse(5 < 2);`            |
| `Assert::AreEqual(a, b)`    | 判断 a == b                    | `Assert::AreEqual(7, add(2, 5));`    |
| `Assert::AreNotEqual(a, b)` | 判断 a != b                    | `Assert::AreNotEqual(3, add(1, 1));` |
| `Assert::Fail()`            | 强制测试失败（用于调试或占位） | `Assert::Fail(L"Not implemented");`  |