修复 ScenarioServiceTests 编译告警(CS8602/CS8625 空引用)

This commit is contained in:
tian 2026-06-18 17:26:58 +08:00
parent f0f5f76b8b
commit 1aa927e471

View File

@ -114,12 +114,12 @@ namespace CounterDrone.Core.Tests
// 读取完整配置
var detail = _service.GetScenarioDetail(scenario.Id);
Assert.Equal("Full Config", detail.Info.Name);
Assert.Equal(4, detail.Info.CurrentStep);
Assert.Equal((int)SceneType.Mountain, detail.Scene.SceneType);
Assert.Equal(10.0, detail.Scene.WindSpeed);
Assert.Equal(3, detail.Drones[0].Quantity);
Assert.Equal((int)AerosolType.ActiveMaterial, detail.Cloud.AerosolType);
Assert.Equal("Full Config", detail!.Info.Name);
Assert.Equal(4, detail!.Info.CurrentStep);
Assert.Equal((int)SceneType.Mountain, detail!.Scene.SceneType);
Assert.Equal(10.0, detail!.Scene.WindSpeed);
Assert.Equal(3, detail!.Drones[0].Quantity);
Assert.Equal((int)AerosolType.ActiveMaterial, detail!.Cloud.AerosolType);
}
// ========== Step Save ==========
@ -136,9 +136,9 @@ namespace CounterDrone.Core.Tests
});
var detail = _service.GetScenarioDetail(scenario.Id);
Assert.Equal((int)WeatherType.Fog, detail.Scene.WeatherType);
Assert.Equal(2000.0, detail.Scene.Visibility);
Assert.Equal("03:00", detail.Scene.TimeOfDay);
Assert.Equal((int)WeatherType.Fog, detail!.Scene.WeatherType);
Assert.Equal(2000.0, detail!.Scene.Visibility);
Assert.Equal("03:00", detail!.Scene.TimeOfDay);
}
[Fact]
@ -149,7 +149,7 @@ namespace CounterDrone.Core.Tests
_service.SaveScene(scenario.Id, new CombatScene { WindSpeed = 15.0 });
var detail = _service.GetScenarioDetail(scenario.Id);
Assert.Equal(15.0, detail.Scene.WindSpeed);
Assert.Equal(15.0, detail!.Scene.WindSpeed);
}
[Fact]
@ -165,11 +165,11 @@ namespace CounterDrone.Core.Tests
_service.SaveControlZones(scenario.Id, zones);
var detail = _service.GetScenarioDetail(scenario.Id);
Assert.Equal(2, detail.ControlZones.Count);
Assert.Equal("禁区A", detail.ControlZones[0].Name);
Assert.Equal(0, detail.ControlZones[0].OrderIndex);
Assert.Equal("禁区B", detail.ControlZones[1].Name);
Assert.Equal(1, detail.ControlZones[1].OrderIndex);
Assert.Equal(2, detail!.ControlZones.Count);
Assert.Equal("禁区A", detail!.ControlZones[0].Name);
Assert.Equal(0, detail!.ControlZones[0].OrderIndex);
Assert.Equal("禁区B", detail!.ControlZones[1].Name);
Assert.Equal(1, detail!.ControlZones[1].OrderIndex);
}
[Fact]
@ -187,7 +187,7 @@ namespace CounterDrone.Core.Tests
});
var detail = _service.GetScenarioDetail(scenario.Id);
Assert.Equal(2, detail.ControlZones.Count);
Assert.Equal(2, detail!.ControlZones.Count);
}
[Fact]
@ -197,7 +197,7 @@ namespace CounterDrone.Core.Tests
_service.SaveScenarioDrone(scenario.Id, TestData.CreateScenarioDrone("default", 5));
var detail = _service.GetScenarioDetail(scenario.Id);
var target = detail.Drones[0];
var target = detail!.Drones[0];
Assert.Equal((int)DroneType.FixedWing, TestData.DefaultDroneSpec.DroneType);
Assert.Equal(5, target.Quantity);
Assert.Equal(200.0, TestData.DefaultDroneSpec.TypicalSpeed);
@ -215,8 +215,8 @@ namespace CounterDrone.Core.Tests
var detail = _service.GetScenarioDetail(scenario.Id);
Assert.Equal(2, detail!.Units.Count);
Assert.Contains(detail.Units, u => u.PositionX == 1000);
Assert.Contains(detail.Units, u => u.PositionX == 2000);
Assert.Contains(detail!.Units, u => u.PositionX == 1000);
Assert.Contains(detail!.Units, u => u.PositionX == 2000);
}
[Fact]
@ -238,11 +238,11 @@ namespace CounterDrone.Core.Tests
_service.SaveRoute(scenario.Id, "default", route, waypoints);
var detail = _service.GetScenarioDetail(scenario.Id);
Assert.Equal((int)FormationMode.Formation, detail.Routes[0].FormationMode);
Assert.Equal(3, detail.WaypointGroups["default"].Count);
Assert.Equal(0, detail.WaypointGroups["default"][0].OrderIndex);
Assert.Equal(2, detail.WaypointGroups["default"][2].OrderIndex);
Assert.Equal(5000.0, detail.WaypointGroups["default"][1].PosX);
Assert.Equal((int)FormationMode.Formation, detail!.Routes[0].FormationMode);
Assert.Equal(3, detail!.WaypointGroups["default"].Count);
Assert.Equal(0, detail!.WaypointGroups["default"][0].OrderIndex);
Assert.Equal(2, detail!.WaypointGroups["default"][2].OrderIndex);
Assert.Equal(5000.0, detail!.WaypointGroups["default"][1].PosX);
}
// ========== Search & Pagination ==========
@ -273,12 +273,12 @@ namespace CounterDrone.Core.Tests
for (int i = 0; i < 15; i++)
_service.CreateScenario($"scenario {i:D2}", "");
var page1 = _service.SearchScenarios(null, null, null, 1, 5);
var page1 = _service.SearchScenarios("", null, null, 1, 5);
Assert.Equal(21, page1.TotalCount); // 15 + 6 预设想定
Assert.Equal(5, page1.Items.Count);
Assert.Equal(5, page1.TotalPages); // 21 ÷ 5 = 5 页
var page3 = _service.SearchScenarios(null, null, null, 3, 5);
var page3 = _service.SearchScenarios("", null, null, 3, 5);
Assert.Equal(5, page3.Items.Count);
}
@ -291,10 +291,10 @@ namespace CounterDrone.Core.Tests
var yesterday = DateTime.UtcNow.AddDays(-1).ToString("yyyy-MM-dd");
var tomorrow = DateTime.UtcNow.AddDays(1).ToString("yyyy-MM-dd");
var result = _service.SearchScenarios(null, yesterday, tomorrow, 1, 10);
var result = _service.SearchScenarios("", yesterday, tomorrow, 1, 10);
Assert.Equal(7, result.TotalCount); // 1 + 6 预设想定
var oldResult = _service.SearchScenarios(null, "2020-01-01", "2020-12-31", 1, 10);
var oldResult = _service.SearchScenarios("", "2020-01-01", "2020-12-31", 1, 10);
Assert.Equal(0, oldResult.TotalCount);
}
@ -308,11 +308,11 @@ namespace CounterDrone.Core.Tests
_service.UpdateStep(scenario.Id, 3);
var detail = _service.GetScenarioDetail(scenario.Id);
Assert.Equal(3, detail.Info.CurrentStep);
Assert.Equal(3, detail!.Info.CurrentStep);
_service.UpdateStep(scenario.Id, 5);
detail = _service.GetScenarioDetail(scenario.Id);
Assert.Equal(5, detail.Info.CurrentStep);
Assert.Equal(5, detail!.Info.CurrentStep);
}
[Fact]
@ -321,10 +321,10 @@ namespace CounterDrone.Core.Tests
var scenario = _service.CreateScenario("Clamp Test", "");
_service.UpdateStep(scenario.Id, 0);
Assert.Equal(1, _service.GetScenarioDetail(scenario.Id).Info.CurrentStep);
Assert.Equal(1, _service.GetScenarioDetail(scenario.Id)!.Info.CurrentStep);
_service.UpdateStep(scenario.Id, 10);
Assert.Equal(5, _service.GetScenarioDetail(scenario.Id).Info.CurrentStep);
Assert.Equal(5, _service.GetScenarioDetail(scenario.Id)!.Info.CurrentStep);
}
// ========== Full Workflow ==========
@ -398,35 +398,35 @@ namespace CounterDrone.Core.Tests
// 8. 验证完整配置
var detail = _service.GetScenarioDetail(scenario.Id);
Assert.Equal("完整流程测试", detail.Info.Name);
Assert.Equal(5, detail.Info.CurrentStep);
Assert.Equal("完整流程测试", detail!.Info.Name);
Assert.Equal(5, detail!.Info.CurrentStep);
Assert.Equal((int)ScenarioStatus.Configuring, detail.Info.Status);
// 场景
Assert.Equal((int)SceneType.Urban, detail.Scene.SceneType);
Assert.Equal((int)WeatherType.Rain, detail.Scene.WeatherType);
Assert.Equal("14:00", detail.Scene.TimeOfDay);
Assert.Equal((int)SceneType.Urban, detail!.Scene.SceneType);
Assert.Equal((int)WeatherType.Rain, detail!.Scene.WeatherType);
Assert.Equal("14:00", detail!.Scene.TimeOfDay);
// 管控区域
Assert.Single(detail.ControlZones);
Assert.Equal("核心区", detail.ControlZones[0].Name);
Assert.Equal("核心区", detail!.ControlZones[0].Name);
// 目标
Assert.Single(detail.Drones);
Assert.Equal(2, detail.Drones[0].Quantity);
Assert.Equal(2, detail!.Drones[0].Quantity);
Assert.Equal(200.0, TestData.DefaultDroneSpec.TypicalSpeed);
// 装备
Assert.NotEmpty(detail.Units);
Assert.NotEmpty(detail!.Units);
// 云团
Assert.Equal((int)AerosolType.ActiveMaterial, detail.Cloud.AerosolType);
Assert.Equal((int)AerosolType.ActiveMaterial, detail!.Cloud.AerosolType);
Assert.Equal(50.0, detail.Cloud.Duration);
// 航路
Assert.Equal((int)FormationMode.Swarm, detail.Routes[0].FormationMode);
Assert.Equal(2, detail.WaypointGroups["default"].Count);
Assert.Equal(250.0, detail.WaypointGroups["default"][0].Speed);
Assert.Equal((int)FormationMode.Swarm, detail!.Routes[0].FormationMode);
Assert.Equal(2, detail!.WaypointGroups["default"].Count);
Assert.Equal(250.0, detail!.WaypointGroups["default"][0].Speed);
// 9. 搜索验证
var searchResult = _service.SearchScenarios("完整流程", null, null, 1, 10);
@ -495,9 +495,9 @@ namespace CounterDrone.Core.Tests
var detail = _service.GetScenarioDetail(scenario.Id);
// Equipment 包含火力单元 + 探测设备
Assert.NotEmpty(detail.Units);
Assert.Contains(detail.Units, e => e.EquipmentRole == (int)EquipmentRole.Detection);
Assert.Contains(detail.Units, e => e.EquipmentRole == (int)EquipmentRole.LaunchPlatform);
Assert.NotEmpty(detail!.Units);
Assert.Contains(detail!.Units, e => e.EquipmentRole == (int)EquipmentRole.Detection);
Assert.Contains(detail!.Units, e => e.EquipmentRole == (int)EquipmentRole.LaunchPlatform);
}
}
}