GoogleTest 使用指南 | DISABLED_ 前缀
GoogleTest 使用指南 | DISABLED_ 前缀
TEST(测试套件名, 测试名)
TEST(TestSuiteName, TestName) {
// 测试代码
}
命名规则:
- 测试套件名:通常是被测试类或模块的名称
- 测试名:描述具体测试的内容
- 两者都必须是有效的 C++ 标识符(不能包含下划线)
对 TestName 使用 DISABLED_ 前缀可以暂时禁用该测试。
// 暂时禁用测试
TEST(MathTest, DISABLED_SlowCalculation) {
// 这个测试不会运行
EXPECT_EQ(SlowFunction(), 42);
}
TEST_F(DatabaseTest, DISABLED_RequiresConnection) {
// 需要数据库连接的测试,暂时禁用
}
示例:
bank_vault.h:
#pragma once
#include <string>
class BankVault {
private:
double secret_balance;
std::string password;
bool ValidatePassword(const std::string& pwd) {
return pwd == password;
}
// 允许特定测试访问私有成员
FRIEND_TEST(BankVaultTest, AccessPrivateMembers);
FRIEND_TEST(BankVaultTest, TestPasswordValidation);
public:
BankVault() : secret_balance(1000000), password("secret123") {}
bool Withdraw(double amount, const std::string& pwd) {
if (ValidatePassword(pwd) && amount <= secret_balance) {
secret_balance -= amount;
return true;
}
return false;
}
};
test_bank_vault.cpp:
#include "gtest/gtest.h"
#include "bank_vault.h"
TEST(BankVaultTest, AccessPrivateMembers) {
BankVault vault;
// 可以直接访问私有成员
EXPECT_EQ(vault.secret_balance, 1000000);
EXPECT_EQ(vault.password, "secret123");
}
TEST(BankVaultTest, TestPasswordValidation) {
BankVault vault;
// 可以调用私有方法
EXPECT_TRUE(vault.ValidatePassword("secret123"));
EXPECT_FALSE(vault.ValidatePassword("wrong"));
}
TEST(BankVaultTest, DISABLED_TestWithdraw)
{
BankVault vault;
EXPECT_TRUE(vault.Withdraw(100, "secret123"));
EXPECT_FALSE(vault.Withdraw(2000000, "secret123"));
EXPECT_FALSE(vault.Withdraw(0, "wrong"));
}
终端输出:
"/Users/xiye/CppProjects/unit-test-example/out/build/Clang 17.0.0 arm64-apple-darwin24.6.0/test_bank_vault"
➜ Clang 17.0.0 arm64-apple-darwin24.6.0 "/Users/xiye/CppProjects/unit-test-example/out/build/Clang 17.0.0 arm64-apple-darwin24.6.0/test_bank_vault"
Running main() from /Users/xiye/CppProjects/unit-test-example/out/build/Clang 17.0.0 arm64-apple-darwin24.6.0/_deps/googletest-src/googletest/src/gtest_main.cc
[==========] Running 2 tests from 1 test suite.
[----------] Global test environment set-up.
[----------] 2 tests from BankVaultTest
[ RUN ] BankVaultTest.AccessPrivateMembers
[ OK ] BankVaultTest.AccessPrivateMembers (0 ms)
[ RUN ] BankVaultTest.TestPasswordValidation
[ OK ] BankVaultTest.TestPasswordValidation (0 ms)
[ DISABLED ] BankVaultTest.DISABLED_TestWithdraw
[----------] 2 tests from BankVaultTest (0 ms total)
[----------] Global test environment tear-down
[==========] 2 tests from 1 test suite ran. (0 ms total)
[ PASSED ] 2 tests.
YOU HAVE 1 DISABLED TEST
若要运行禁用的测试,在执行命令后加上 --gtest_also_run_disabled_tests:
./test_executable --gtest_also_run_disabled_tests
现在,3 个测试都执行了:
➜ Clang 17.0.0 arm64-apple-darwin24.6.0 ./test_bank_vault --gtest_also_run_disabled_tests
Running main() from /Users/xiye/CppProjects/unit-test-example/out/build/Clang 17.0.0 arm64-apple-darwin24.6.0/_deps/googletest-src/googletest/src/gtest_main.cc
[==========] Running 3 tests from 1 test suite.
[----------] Global test environment set-up.
[----------] 3 tests from BankVaultTest
[ RUN ] BankVaultTest.AccessPrivateMembers
[ OK ] BankVaultTest.AccessPrivateMembers (0 ms)
[ RUN ] BankVaultTest.TestPasswordValidation
[ OK ] BankVaultTest.TestPasswordValidation (0 ms)
[ RUN ] BankVaultTest.DISABLED_TestWithdraw
[ OK ] BankVaultTest.DISABLED_TestWithdraw (0 ms)
[----------] 3 tests from BankVaultTest (0 ms total)
[----------] Global test environment tear-down
[==========] 3 tests from 1 test suite ran. (0 ms total)
[ PASSED ] 3 tests.
8496

被折叠的 条评论
为什么被折叠?



