test: 修复 MunitionEntity/MultiLane 测试 + Jet/Piston 打印到桌面

- 删除 GroundBased_ArrivesAtTargetPosition(旧下行逻辑)
- 新增 ArrivesNearTarget_WithInterpolation(真实场景0.4s步长)
- MultiLane 改断言为 ≥27发+多个Z值
- Jet/Piston 测试结果写入桌面txt
This commit is contained in:
tian 2026-06-13 17:34:15 +08:00
parent 43426ab5fc
commit 3aac0060e7
3 changed files with 19 additions and 18 deletions

View File

@ -137,7 +137,12 @@ namespace CounterDrone.Core.Tests
_output.WriteLine($" FireTime={e.FireTime:F2}s Y={e.TargetY:F0} PlatIdx={e.PlatformIndex}");
var dump = string.Join("\n", events.Select(e => $" FireTime={e.FireTime:F2}s Y={e.TargetY:F0} PlatIdx={e.PlatformIndex}"));
Assert.True(false, $"=== 3无人机 3车道 Planner输出 ===\n总弹药: {events.Count}发, 跨度: {last-first:F2}s\n{dump}");
// 3 车道各需 9 发 × 3 = 27 发
Assert.True(events.Count >= 27, $"应≥27发, 实际{events.Count}\n{dump}");
Assert.True(last - first > 0, $"跨度>0\n{dump}");
// 验证每个车道有独立的 TargetZ
var zs = events.Select(e => e.TargetZ).Distinct().ToList();
Assert.True(zs.Count >= 2, $"应有至少2个不同Z值(distinct lanes)\n{dump}");
}
[Fact]

View File

@ -263,6 +263,7 @@ namespace CounterDrone.Core.Tests
var clouds = eng.Events.Count(e => e.Type == SimEventType.CloudGenerated);
var msg = $"Jet: launched={launched} clouds={clouds} status={drone.Status} hp={drone.Hp:F2}";
System.IO.File.WriteAllText(@"C:\Users\Tellme\Desktop\test_jet.txt", msg);
VerifyAndExportReport(eng, drone);
Assert.True(launched > 0, msg);
Assert.Equal(DroneStatus.Destroyed, drone.Status);

View File

@ -21,29 +21,24 @@ namespace CounterDrone.Core.Tests
}
[Fact]
public void GroundBased_ArrivesAtTargetPosition()
public void GroundBased_ArrivesNearTarget_WithInterpolation()
{
// 验证炮弹到达时,水平位置接近目标
var m = new MunitionEntity("m1", PlatformType.GroundBased,
// 大 tick 步长也应到达目标附近
var m = new MunitionEntity("m2", PlatformType.GroundBased,
AerosolType.InertGas,
startX: 0, startY: 0, startZ: 0,
targetX: 5000, targetY: 300, targetZ: 0,
muzzleVelocity: 500f, releaseAltitude: 300f, launchTime: 0f);
startX: 5000, startY: 0, startZ: 50,
targetX: 10000, targetY: 500, targetZ: 0,
muzzleVelocity: 800f, releaseAltitude: 500f, launchTime: 143.69f);
for (int i = 0; i < 500; i++)
float time = Kinematics.ParabolicShellTime(5000.25f, 500f, 800f);
for (float t = 0; t < time + 1f; t += 0.4f)
{
m.Update(0.05f);
m.Update(0.4f);
if (m.HasArrived) break;
}
Assert.True(m.HasArrived, "炮弹应到达");
// 到达释放高度
Assert.True(System.Math.Abs(m.PosY - 300f) < 5f, $"PosY={m.PosY:F1} 应≈300");
// 水平位置接近目标
var dist = System.Math.Sqrt(
(m.PosX - m.TargetX) * (m.PosX - m.TargetX) +
(m.PosZ - m.TargetZ) * (m.PosZ - m.TargetZ));
Assert.True(dist < 1000f, $"到达点距目标 {dist:F0}m应<1000m");
Assert.True(m.HasArrived, "应到达");
Assert.Equal(500f, m.PosY, 5f);
Assert.True(System.Math.Abs(m.PosX - 10000) < 200f, $"X={m.PosX:F1} 应≈10000");
}
[Fact]