ThreatSourceLibaray/ThreatSource.Tests/src/Indicator/LaserDesignatorTests.cs

124 lines
3.7 KiB
C#

using Xunit;
using ThreatSource.Indicator;
using ThreatSource.Simulation;
using ThreatSource.Utils;
using ThreatSource.Tests.Simulation;
using ThreatSource.Target;
namespace ThreatSource.Tests.Indicator
{
public class LaserDesignatorTests
{
private readonly SimulationManager _simulationManager;
private readonly TestSimulationAdapter _testAdapter;
private readonly LaserDesignator _laserDesignator;
private readonly LaserDesignatorConfig _config;
private readonly Tank _tank;
public LaserDesignatorTests()
{
_simulationManager = new SimulationManager();
_testAdapter = new TestSimulationAdapter(_simulationManager);
_simulationManager.SetSimulationAdapter(_testAdapter);
_config = new LaserDesignatorConfig
{
Id = "laser1",
InitialPosition = new Vector3D(0, 0, 0),
LaserPower = 1000,
LaserDivergenceAngle = 0.001
};
_tank = new Tank("target1", new Vector3D(100, 0, 0), 0, _simulationManager);
_simulationManager.RegisterEntity("target1", _tank);
_laserDesignator = new LaserDesignator(
"laser1",
"target1",
"missile1",
10,
_config,
_simulationManager
);
_simulationManager.RegisterEntity("laser1", _laserDesignator);
}
[Fact]
public void Constructor_InitializesPropertiesCorrectly()
{
Assert.Equal("laser1", _laserDesignator.Id);
Assert.Equal("target1", _laserDesignator.TargetId);
Assert.Equal("missile1", _laserDesignator.MissileId);
Assert.Equal(1000, _laserDesignator.LaserPower);
Assert.Equal(0.001, _laserDesignator.LaserDivergenceAngle);
Assert.False(_laserDesignator.IsActive);
Assert.False(_laserDesignator.IsIlluminationOn);
Assert.False(_laserDesignator.IsJammed);
}
[Fact]
public void Activate_SetsCorrectState()
{
// Act
_laserDesignator.Activate();
// Assert
Assert.True(_laserDesignator.IsActive);
}
[Fact]
public void Deactivate_SetsCorrectState()
{
// Arrange
_laserDesignator.Activate();
// Act
_laserDesignator.Deactivate();
// Assert
Assert.False(_laserDesignator.IsActive);
}
[Theory]
[InlineData(1000000, true)] // 高功率干扰
[InlineData(1, false)] // 低功率干扰
public void LaserJamming_SetsCorrectJammedState(double jammingPower, bool expectedJammedState)
{
// Arrange
_laserDesignator.Activate();
// Act
_simulationManager.PublishEvent(new LaserJammingEvent
{
TargetId = "target1",
JammingPower = jammingPower,
SenderId = "jammer1"
});
_laserDesignator.Update(0.1);
// Assert
Assert.Equal(expectedJammedState, _laserDesignator.IsJammed);
}
[Fact]
public void GetStatus_ReturnsCorrectStatus()
{
// Act
string status = _laserDesignator.GetStatus();
// Assert
var expectedParts = new[]
{
"激光目标指示器",
_laserDesignator.Id,
"位置",
_laserDesignator.Position.ToString()
};
foreach (var part in expectedParts)
{
Assert.Contains(part, status);
}
}
}
}