测试
在 C++ 中,测试主要是创建和执行测试用例,以确保你写的 C++ 代码是符合预期的。
断言
断言 用于在程序执行期间检查某些条件是否为真。<cassert>
头文件中的 assert
宏是 C++ 中基本形式的断言。
#include <iostream>
#include <cassert>
int divide(int a, int b) {
// 断言分母(b)不为零
assert(b != 0);
return a / b;
}
int main() {
int result;
// 使用有效的分母进行测试
result = divide(10, 2);
std::cout << "Result: " << result << std::endl;
// 使用无效的分母进行测试(将触发断言失败)
result = divide(8, 0);
// 如果断言失败,将不会执行此行
std::cout << "This line will not be printed if the assertion fails." << std::endl;
return 0;
}
测试框架
在 C++ 中,通常使用Google Test 或 Catch2之类测试框架进行测试。这些框架提供了编写和运行测试用例的辅助工具,并可以生成报告结果。
以 Google Test
测试框架为例:
// calculator.h
#ifndef CALCULATOR_H
#define CALCULATOR_H
class Calculator {
public:
int add(int a, int b);
int subtract(int a, int b);
};
#endif // CALCULATOR_H
// calculator.cpp
#include "calculator.h"
int Calculator::add(int a, int b) {
return a + b;
}
int Calculator::subtract(int a, int b) {
return a - b;
}
// test_calculator.cpp
#include "gtest/gtest.h"
#include "calculator.h"
TEST(CalculatorTest, Add) {
Calculator calculator;
EXPECT_EQ(calculator.add(2, 3), 5);
EXPECT_EQ(calculator.add(-2, 3), 1);
}
TEST(CalculatorTest, Subtract) {
Calculator calculator;
EXPECT_EQ(calculator.subtract(5, 3), 2);
EXPECT_EQ(calculator.subtract(-2, -3), 1);
}
int main(int argc, char** argv) {
::testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}
可以像这样编译测试用例:
g++ -std=c++11 test_calculator.cpp calculator.cpp -lgtest -lgtest_main -pthread -o test_calculator
Loading...
> 此处输出代码运行结果