#include #include #include #include #include // 假设的数据结构 struct RackListResponse { std::string rack_id; std::string rack_name; int unit_count; }; // 服务接口 class Service { public: virtual ~Service() = default; virtual std::vector list_racks() = 0; }; // 全局服务指针(模拟原 Python 代码中的 service 模块) Service* g_service = nullptr; // 被测函数:对应原 Python 中的 list_racks() std::vector list_racks() { return g_service->list_racks(); } // Mock 服务类 class MockService : public Service { public: MOCK_METHOD(std::vector, list_racks, (), (override)); }; // 测试夹具 class ListRacksTest : public ::testing::Test { protected: void SetUp() override { mock_service = new MockService(); g_service = mock_service; } void TearDown() override { delete mock_service; g_service = nullptr; } MockService* mock_service; }; // 正常输入测试:返回非空机架列表 TEST_F(ListRacksTest, testListRacksNormal) { std::vector expected = { {"rack-1", "机架A", 5}, {"rack-2", "机架B", 3} }; EXPECT_CALL(*mock_service, list_racks()) .WillOnce(::testing::Return(expected)); auto result = list_racks(); ASSERT_EQ(result.size(), 2); EXPECT_EQ(result[0].rack_id, "rack-1"); EXPECT_EQ(result[0].rack_name, "机架A"); EXPECT_EQ(result[0].unit_count, 5); EXPECT_EQ(result[1].rack_id, "rack-2"); EXPECT_EQ(result[1].rack_name, "机架B"); EXPECT_EQ(result[1].unit_count, 3); } // 边界值测试:返回空列表 TEST_F(ListRacksTest, testListRacksEmpty) { std::vector empty; EXPECT_CALL(*mock_service, list_racks()) .WillOnce(::testing::Return(empty)); auto result = list_racks(); EXPECT_TRUE(result.empty()); } // 异常输入测试:服务抛出异常 TEST_F(ListRacksTest, testListRacksServiceThrows) { EXPECT_CALL(*mock_service, list_racks()) .WillOnce(::testing::Throw(std::runtime_error("database error"))); EXPECT_THROW(list_racks(), std::runtime_error); }