test_mset.py 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. import unittest
  2. import pandas as pd
  3. import numpy as np
  4. from pathlib import Path
  5. from health_monitoring.services.mset_service import MSETService
  6. class TestMSETService(unittest.TestCase):
  7. def setUp(self):
  8. """初始化测试数据"""
  9. self.service = MSETService()
  10. self.test_data = self.service.generate_test_data(500)
  11. def test_train_model_dimension(self):
  12. """测试模型训练的维度匹配"""
  13. gen_data = self.test_data['generator'].values
  14. self.service.train_model(gen_data)
  15. self.assertIsNotNone(self.service.matrixD)
  16. self.assertIsNotNone(self.service.normalDataBallTree)
  17. def test_subsystem_health_evaluation(self):
  18. """测试子系统健康度计算(含AHP权重)"""
  19. gen_data = self.test_data['generator']
  20. weights, score = self.service.evaluate_subsystem_health(gen_data)
  21. # 验证权重和评分有效性
  22. self.assertEqual(len(weights), 4, "发电机应有4个特征权重")
  23. self.assertTrue(0 <= score <= 100, f"评分异常: {score}")
  24. print(f"发电机健康度: {score:.2f}, 权重: {weights.round(2)}")
  25. def test_ahp_weight_calculation(self):
  26. """测试AHP权重计算逻辑"""
  27. # 模拟3个子系统的AHP矩阵
  28. matrix = np.array([[1, 2, 3], [1/2, 1, 2], [1/3, 1/2, 1]])
  29. eigenvalue, eigenvector = np.linalg.eig(matrix)
  30. max_idx = np.argmax(eigenvalue)
  31. weights = eigenvector[:, max_idx].real
  32. weights = weights / np.sum(weights)
  33. # 修正后的断言:将消息作为最后一个位置参数
  34. self.assertAlmostEqual(np.sum(weights), 1, 4, "AHP权重和应为1")
  35. print(f"AHP权重测试: {weights.round(2)}")
  36. def test_overall_health_with_ahp(self):
  37. """测试整体健康度(严格使用AHP矩阵)"""
  38. overall_score, subsys_scores = self.service.evaluate_turbine_health(self.test_data)
  39. self.assertTrue(0 <= overall_score <= 100, f"整体评分异常: {overall_score}")
  40. self.assertGreater(len(subsys_scores), 0, "至少存在一个子系统评分")
  41. print(f"整体健康度: {overall_score:.2f}, 子系统: {subsys_scores}")
  42. if __name__ == "__main__":
  43. unittest.main()