From cec5a112b8c1f178ad069cb246ba03d31e9b3a8c Mon Sep 17 00:00:00 2001 From: YX <675011040@qq.com> Date: Tue, 19 May 2026 11:23:41 +0800 Subject: [PATCH] =?UTF-8?q?AI=20=E8=87=AA=E5=8A=A8=E7=94=9F=E6=88=90?= =?UTF-8?q?=E6=B5=8B=E8=AF=95=E7=94=A8=E4=BE=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/CMakeLists.txt | 25 +++++++++++++++++ tests/test_list_racks.cpp | 56 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 81 insertions(+) create mode 100644 tests/CMakeLists.txt create mode 100644 tests/test_list_racks.cpp diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt new file mode 100644 index 0000000..8d8e4d6 --- /dev/null +++ b/tests/CMakeLists.txt @@ -0,0 +1,25 @@ +cmake_minimum_required(VERSION 3.10.0) +project(test_ODF) +include(FetchContent) +if (MSVC) + add_compile_options(/utf-8) +endif() +FetchContent_Declare( + googletest + URL https://github.com/google/googletest/archive/03597a01ee50ed33e9dfd640b249b4be3799d395.zip +) +# For Windows: Prevent overriding the parent project's compiler/linker settings +set(gtest_force_shared_crt ON CACHE BOOL "" FORCE) +FetchContent_MakeAvailable(googletest) +set(CMAKE_CXX_STANDARD 17) +set(CMAKE_CXX_STANDARD_REQUIRED ON) +include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../include) + +include(CTest) +enable_testing() + +add_executable(test_ODF test_list_racks.cpp ../app/main.py) + +target_link_libraries(test_ODF gtest gmock gtest_main) +include(GoogleTest) +gtest_discover_tests(test_ODF) \ No newline at end of file diff --git a/tests/test_list_racks.cpp b/tests/test_list_racks.cpp new file mode 100644 index 0000000..c2173da --- /dev/null +++ b/tests/test_list_racks.cpp @@ -0,0 +1,56 @@ +#include +#include +#include + +// 假设 RackInfo 结构体 +struct RackInfo { + std::string rackName; + int unitCount; +}; + +// 假设 list_racks 函数的声明,返回 std::vector +std::vector list_racks(); + +// 测试夹具,用于准备公共测试数据 +class ListRacksTest : public ::testing::Test { +protected: + void SetUp() override { + // 在需要时初始化 + } + + void TearDown() override { + } +}; + +// 正常输入测试:存在多个机架时,验证返回列表非空且信息正确 +TEST_F(ListRacksTest, testListRacksNormal) { + std::vector racks = list_racks(); + ASSERT_FALSE(racks.empty()); + EXPECT_GT(racks.size(), 0); + // 假设至少有一个机架名称为已知值,例如 "ODF-A" + bool found = false; + for (const auto& rack : racks) { + if (rack.rackName == "ODF-A") { + found = true; + EXPECT_GT(rack.unitCount, 0); + break; + } + } + EXPECT_TRUE(found) << "ODF-A rack should exist"; +} + +// 边界值测试:没有机架时,返回空列表 +TEST_F(ListRacksTest, testListRacksEmpty) { + // 需要 mock 或控制 list_racks 返回空列表,假设系统根本没有配置机架 + // 由于无法直接控制,此测试依赖于测试环境,此处仅给出示例逻辑 + std::vector racks = list_racks(); + EXPECT_TRUE(racks.empty()); +} + +// 特殊场景测试:验证列表中的每个机架都有单元数量 +TEST_F(ListRacksTest, testListRacksEachRackHasUnitCount) { + std::vector racks = list_racks(); + for (const auto& rack : racks) { + EXPECT_GE(rack.unitCount, 0); // 单元数量应非负 + } +}