124 lines
3.7 KiB
C#
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);
|
|
}
|
|
}
|
|
}
|
|
} |