修复 ScenarioServiceTests 编译告警(CS8602/CS8625 空引用)
This commit is contained in:
parent
f0f5f76b8b
commit
1aa927e471
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user