# 单元测试相关知识点 ## 单元测试 ### 单元测试创建 打开vs2022选择`C++`的`测试`选择第一个`本机单元测试项目` ![image-20250709155454475](./pictures/image-20250709155454475.png) ps:怎么添加一个项目到单元测试 在单元测试的时候需要添加现有项选择`obj`文件就能链接成功 ![image-20250711142542564](./pictures/image-20250711142542564.png) ### 代码覆盖度 代码覆盖就是测试代码的每一条语句都要执行到,确保不发生错误 下面是编写的测试代码 ![image-20250709170046904](./pictures/image-20250709170046904.png) 以下是测试代码 ![image-20250709170003432](./pictures/image-20250709170003432.png) ### 运行性能 ### 测试样例书写 1. 需要测试的代码 ```C++ double MathLibrary::Divide(double a, double b) { if (b != 0) return a / b; return 0.0; } bool MathLibrary::IsPositive(int n) { return n >= 0; } bool MathLibrary::CheckRange(int a, int b) { return (a > 0) && (b < 10); } double MathLibrary::CalculateDiscount(int age, bool isMember) { if (age < 18) return isMember ? 0.25 : 0.20; else return isMember ? 0.15 : 0.10; } ``` 2. 以下时测试样例的书写 ```C++ #include "pch.h" #include "CppUnitTest.h" #include "MathLibrary.h" using namespace Microsoft::VisualStudio::CppUnitTestFramework; namespace UnitTestDemo { TEST_CLASS(UnitTestDemo) { public: // 语句覆盖 TEST_METHOD(Divide_ZeroDivisor1) { Assert::AreEqual(0.0, MathLibrary::Divide(4, 0)); } TEST_METHOD(Divide_ZeroDivisor2) { Assert::AreEqual(0.0, MathLibrary::Divide(4, 0)); } // 分支覆盖 TEST_METHOD(IsPositive_Positive1) { Assert::IsTrue(MathLibrary::IsPositive(5)); } TEST_METHOD(IsPositive_Negative2) { Assert::IsFalse(MathLibrary::IsPositive(-5)); } // 条件覆盖 TEST_METHOD(CheckRange_BothTrue1) { Assert::IsTrue(MathLibrary::CheckRange(5, 5)); } TEST_METHOD(CheckRange_FirstFalse2) { Assert::IsFalse(MathLibrary::CheckRange(-5, 5)); } TEST_METHOD(CheckRange_SecondFalse3) { Assert::IsFalse(MathLibrary::CheckRange(5, 15)); } // 路径覆盖 TEST_METHOD(Discount_TeenMember1) { Assert::AreEqual(0.25, MathLibrary::CalculateDiscount(15, true)); } TEST_METHOD(Discount_TeenNonMember2) { Assert::AreEqual(0.20, MathLibrary::CalculateDiscount(15, false)); } TEST_METHOD(Discount_AdultMember3) { Assert::AreEqual(0.15, MathLibrary::CalculateDiscount(20, true)); } TEST_METHOD(Discount_AdultNonMember4) { Assert::AreEqual(0.10, MathLibrary::CalculateDiscount(20, false)); } }; } ``` ### 单元测试的调试 在需要调试的位置打上断点,右键点击`调试测试` ![image-20250710135842421](./pictures/image-20250710135842421.png) ![image-20250710135748248](./pictures/image-20250710135748248.png)