cdemo/tests/test_utils.cpp

93 lines
2.5 KiB
C++
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include "gtest/gtest.h"
#include "src/utils.cpp"
#include <iostream>
#include <sstream>
// 测试 unused_function 函数
// 注意:该函数是静态函数,无法从外部直接调用
// 因此无法为其编写直接的单元测试
// 但我们可以验证它不会影响其他函数的行为
// 测试 test_unused_code 函数
class TestUnusedCodeTest : public ::testing::Test {
protected:
void SetUp() override {
// 重定向 cout 到 stringstream以便捕获输出
originalCoutBuffer = std::cout.rdbuf();
std::cout.rdbuf(testOutput.rdbuf());
}
void TearDown() override {
// 恢复 cout 的原始缓冲区
std::cout.rdbuf(originalCoutBuffer);
}
std::stringstream testOutput;
std::streambuf* originalCoutBuffer;
};
// 正常输入测试:验证函数正常执行且输出正确
TEST_F(TestUnusedCodeTest, NormalExecution) {
// 调用函数
test_unused_code();
// 验证输出
std::string output = testOutput.str();
// 移除可能的换行符
if (!output.empty() && output.back() == '\n') {
output.pop_back();
}
EXPECT_EQ(output, "200");
}
// 边界值测试:验证函数在多次调用后仍然正常工作
TEST_F(TestUnusedCodeTest, MultipleCalls) {
// 第一次调用
test_unused_code();
std::string output1 = testOutput.str();
// 清空输出缓冲区
testOutput.str("");
testOutput.clear();
// 第二次调用
test_unused_code();
std::string output2 = testOutput.str();
// 移除可能的换行符
if (!output1.empty() && output1.back() == '\n') {
output1.pop_back();
}
if (!output2.empty() && output2.back() == '\n') {
output2.pop_back();
}
EXPECT_EQ(output1, "200");
EXPECT_EQ(output2, "200");
}
// 特殊场景测试:验证函数不会抛出异常
TEST_F(TestUnusedCodeTest, NoExceptionThrown) {
// 验证函数调用不会抛出任何异常
EXPECT_NO_THROW(test_unused_code());
}
// 特殊场景测试:验证函数执行后程序状态正常
TEST_F(TestUnusedCodeTest, ProgramStateUnaffected) {
// 记录调用前的输出流状态
auto beforeState = std::cout.rdstate();
// 调用函数
test_unused_code();
// 验证输出流状态未改变(除了正常的输出操作)
auto afterState = std::cout.rdstate();
EXPECT_EQ(beforeState, afterState);
}
// 主函数
int main(int argc, char **argv) {
::testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}