» C++快速入门 » 2. 高级篇 » 2.5 测试

测试

在 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 TestCatch2之类测试框架进行测试。这些框架提供了编写和运行测试用例的辅助工具,并可以生成报告结果。

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