From 32fc0107d623037e83aeae8e2d763bdca86945a6 Mon Sep 17 00:00:00 2001 From: lids <1713278948@qq.com> Date: Fri, 24 Apr 2026 17:32:35 +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/test_alert_manager.cpp | 233 +++++++++++++++++++++++++++++++++++ 1 file changed, 233 insertions(+) create mode 100644 tests/test_alert_manager.cpp diff --git a/tests/test_alert_manager.cpp b/tests/test_alert_manager.cpp new file mode 100644 index 0000000..ae908e3 --- /dev/null +++ b/tests/test_alert_manager.cpp @@ -0,0 +1,233 @@ +#include +#include +#include +#include "alert_manager.hpp" + +using namespace std; + +namespace { + +// 辅助函数:比较 AlertInfo 是否相等(忽略时间戳) +bool isEqualAlertInfo(const AlertInfo& a, const AlertInfo& b) { + return a.type == b.type && a.status == b.status && a.description == b.description; +} + +// 测试用例类 +class AlertManagerTest : public ::testing::Test { +protected: + AlertManager manager; + + void SetUp() override { + manager.initialize(); + } +}; + +// 测试 checkAltitudeAlert 正常输入 +TEST_F(AlertManagerTest, testCheckAltitudeAlertNormalInput) { + manager.setAltitudeThresholds(100.0f, 50.0f); + manager.checkAltitudeAlert(120.0f, 1000); + EXPECT_TRUE(manager.hasActiveAlerts()); + EXPECT_EQ(manager.getActiveAlerts().size(), 1); + EXPECT_EQ(manager.getActiveAlerts()[0].type, AlertType::ALTITUDE_UPPER); + EXPECT_EQ(manager.getActiveAlerts()[0].status, AlertStatus::ACTIVE); +} + +// 测试 checkAltitudeAlert 边界值(等于上限) +TEST_F(AlertManagerTest, testCheckAltitudeAlertBoundaryAtUpperLimit) { + manager.setAltitudeThresholds(100.0f, 50.0f); + manager.checkAltitudeAlert(100.0f, 1000); + EXPECT_FALSE(manager.hasActiveAlerts()); +} + +// 测试 checkAltitudeAlert 边界值(低于下限) +TEST_F(AlertManagerTest, testCheckAltitudeAlertBoundaryBelowLowerLimit) { + manager.setAltitudeThresholds(100.0f, 50.0f); + manager.checkAltitudeAlert(49.0f, 1000); + EXPECT_TRUE(manager.hasActiveAlerts()); + EXPECT_EQ(manager.getActiveAlerts()[0].type, AlertType::ALTITUDE_LOWER); +} + +// 测试 setAltitudeThresholds 正常输入 +TEST_F(AlertManagerTest, testSetAltitudeThresholdsNormalInput) { + manager.setAltitudeThresholds(150.0f, 30.0f); + EXPECT_FLOAT_EQ(manager.getUpperThreshold(), 150.0f); + EXPECT_FLOAT_EQ(manager.getLowerThreshold(), 30.0f); +} + +// 测试 setAltitudeThresholds 边界值(负数) +TEST_F(AlertManagerTest, testSetAltitudeThresholdsNegativeValues) { + manager.setAltitudeThresholds(-10.0f, -20.0f); + EXPECT_FLOAT_EQ(manager.getUpperThreshold(), -10.0f); + EXPECT_FLOAT_EQ(manager.getLowerThreshold(), -20.0f); +} + +// 测试 triggerSensorFailure 正常输入 +TEST_F(AlertManagerTest, testTriggerSensorFailureNormalInput) { + manager.triggerSensorFailure(2000); + EXPECT_TRUE(manager.hasActiveAlerts()); + EXPECT_EQ(manager.getActiveAlerts()[0].type, AlertType::SENSOR_FAILURE); + EXPECT_EQ(manager.getActiveAlerts()[0].status, AlertStatus::ACTIVE); +} + +// 测试 triggerLowBattery 正常输入(默认电量) +TEST_F(AlertManagerTest, testTriggerLowBatteryNormalInputDefaultLevel) { + manager.triggerLowBattery(3000); + EXPECT_TRUE(manager.hasActiveAlerts()); + EXPECT_EQ(manager.getActiveAlerts()[0].type, AlertType::LOW_BATTERY); + EXPECT_EQ(manager.getActiveAlerts()[0].status, AlertStatus::ACTIVE); + EXPECT_EQ(manager.getActiveAlerts()[0].description, "Low battery: 20.0%") +;} + +// 测试 triggerLowBattery 特殊场景(自定义电量) +TEST_F(AlertManagerTest, testTriggerLowBatteryCustomLevel) { + manager.triggerLowBattery(3000, 10.5f); + EXPECT_EQ(manager.getActiveAlerts()[0].description, "Low battery: 10.5%" ); +} + +// 测试 triggerCommunicationError 正常输入 +TEST_F(AlertManagerTest, testTriggerCommunicationErrorNormalInput) { + manager.triggerCommunicationError(4000); + EXPECT_TRUE(manager.hasActiveAlerts()); + EXPECT_EQ(manager.getActiveAlerts()[0].type, AlertType::COMMUNICATION_ERROR); +} + +// 测试 acknowledgeAllAlerts 正常输入 +TEST_F(AlertManagerTest, testAcknowledgeAllAlertsNormalInput) { + manager.triggerSensorFailure(5000); + manager.acknowledgeAllAlerts(6000); + EXPECT_FALSE(manager.hasUnacknowledgedAlerts()); + EXPECT_TRUE(manager.getActiveAlerts()[0].isActive()); + EXPECT_EQ(manager.getActiveAlerts()[0].status, AlertStatus::ACKNOWLEDGED); +} + +// 测试 acknowledgeAlert 正常输入 +TEST_F(AlertManagerTest, testAcknowledgeAlertNormalInput) { + manager.triggerLowBattery(7000); + manager.acknowledgeAlert(AlertType::LOW_BATTERY, 8000); + EXPECT_FALSE(manager.hasUnacknowledgedAlerts()); + EXPECT_EQ(manager.getActiveAlerts()[0].status, AlertStatus::ACKNOWLEDGED); +} + +// 测试 resetAlert 正常输入 +TEST_F(AlertManagerTest, testResetAlertNormalInput) { + manager.triggerSensorFailure(9000); + manager.resetAlert(AlertType::SENSOR_FAILURE); + EXPECT_FALSE(manager.hasActiveAlerts()); + EXPECT_EQ(manager.getActiveAlerts().size(), 0); +} + +// 测试 resetAllAlerts 正常输入 +TEST_F(AlertManagerTest, testResetAllAlertsNormalInput) { + manager.triggerSensorFailure(10000); + manager.triggerLowBattery(11000); + manager.resetAllAlerts(); + EXPECT_FALSE(manager.hasActiveAlerts()); + EXPECT_EQ(manager.getActiveAlerts().size(), 0); +} + +// 测试 hasActiveAlerts 正常输入 +TEST_F(AlertManagerTest, testHasActiveAlertsNormalInput) { + manager.triggerSensorFailure(12000); + EXPECT_TRUE(manager.hasActiveAlerts()); +} + +// 测试 hasActiveAlerts 边界值(无预警) +TEST_F(AlertManagerTest, testHasActiveAlertsNoAlerts) { + EXPECT_FALSE(manager.hasActiveAlerts()); +} + +// 测试 hasUnacknowledgedAlerts 正常输入 +TEST_F(AlertManagerTest, testHasUnacknowledgedAlertsNormalInput) { + manager.triggerSensorFailure(13000); + EXPECT_TRUE(manager.hasUnacknowledgedAlerts()); +} + +// 测试 hasUnacknowledgedAlerts 边界值(已确认) +TEST_F(AlertManagerTest, testHasUnacknowledgedAlertsAfterAcknowledge) { + manager.triggerSensorFailure(14000); + manager.acknowledgeAllAlerts(15000); + EXPECT_FALSE(manager.hasUnacknowledgedAlerts()); +} + +// 测试 getActiveAlerts 正常输入 +TEST_F(AlertManagerTest, testGetActiveAlertsNormalInput) { + manager.triggerSensorFailure(16000); + auto alerts = manager.getActiveAlerts(); + EXPECT_EQ(alerts.size(), 1); + EXPECT_EQ(alerts[0].type, AlertType::SENSOR_FAILURE); +} + +// 测试 getActiveAlerts 边界值(无活动预警) +TEST_F(AlertManagerTest, testGetActiveAlertsEmpty) { + auto alerts = manager.getActiveAlerts(); + EXPECT_EQ(alerts.size(), 0); +} + +// 测试 getAlertHistory 正常输入 +TEST_F(AlertManagerTest, testGetAlertHistoryNormalInput) { + manager.triggerSensorFailure(17000); + manager.triggerLowBattery(18000); + auto history = manager.getAlertHistory(1); + EXPECT_EQ(history.size(), 1); + EXPECT_EQ(history[0].type, AlertType::LOW_BATTERY); +} + +// 测试 getAlertHistory 边界值(超过最大历史数量) +TEST_F(AlertManagerTest, testGetAlertHistoryMaxCountExceeded) { + for (int i = 0; i < 10; ++i) { + manager.triggerSensorFailure(19000 + i); + } + auto history = manager.getAlertHistory(5); + EXPECT_EQ(history.size(), 5); +} + +// 测试 getStatusDescription 正常输入 +TEST_F(AlertManagerTest, testGetStatusDescriptionNormalInput) { + manager.triggerSensorFailure(20000); + string desc = manager.getStatusDescription(); + EXPECT_NE(desc.find("1 active alert"), string::npos); +} + +// 测试 getStatusDescription 边界值(无预警) +TEST_F(AlertManagerTest, testGetStatusDescriptionNoAlerts) { + string desc = manager.getStatusDescription(); + EXPECT_EQ(desc, "No active alerts"); +} + +// 测试 clearHistory 正常输入 +TEST_F(AlertManagerTest, testClearHistoryNormalInput) { + manager.triggerSensorFailure(21000); + manager.clearHistory(); + EXPECT_EQ(manager.getAlertHistory().size(), 0); +} + +// 测试 getUpperThreshold 正常输入 +TEST_F(AlertManagerTest, testGetUpperThresholdNormalInput) { + manager.setAltitudeThresholds(200.0f, 100.0f); + EXPECT_FLOAT_EQ(manager.getUpperThreshold(), 200.0f); +} + +// 测试 getLowerThreshold 正常输入 +TEST_F(AlertManagerTest, testGetLowerThresholdNormalInput) { + manager.setAltitudeThresholds(200.0f, 100.0f); + EXPECT_FLOAT_EQ(manager.getLowerThreshold(), 100.0f); +} + +// 测试 isSensorNormal 正常输入(传感器正常) +TEST_F(AlertManagerTest, testIsSensorNormalNormal) { + EXPECT_TRUE(manager.isSensorNormal()); +} + +// 测试 isSensorNormal 特殊场景(传感器故障) +TEST_F(AlertManagerTest, testIsSensorNormalWithFailure) { + manager.triggerSensorFailure(22000); + EXPECT_FALSE(manager.isSensorNormal()); +} + +} // namespace + +// 主函数 +int main(int argc, char **argv) { + ::testing::InitGoogleTest(&argc, argv); + return RUN_ALL_TESTS(); +} \ No newline at end of file