You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

2.7 KiB

单元测试相关知识点

单元测试

单元测试创建

打开vs2022选择C++测试选择第一个本机单元测试项目

image-20250709155454475

ps:怎么添加一个项目到单元测试 在单元测试的时候需要添加现有项选择obj文件就能链接成功

image-20250711142542564

代码覆盖度

代码覆盖就是测试代码的每一条语句都要执行到,确保不发生错误

下面是编写的测试代码

image-20250709170046904

以下是测试代码

image-20250709170003432

运行性能

测试样例书写

  1. 需要测试的代码
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;
}
  1. 以下时测试样例的书写
#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

image-20250710135748248