fix(tests): 修复 SimulatedXRaySourceTests 因 VariablesConnectedEvent 未被 Mock 导致的失败
SimulatedXRaySource.ConnectVariables() 中新增的 VariablesConnectedEvent 发布未被测试的 EventAggregator Mock 覆盖,导致 GetEvent<T>() 返回 null, 触发 NullReferenceException,5 个测试全部失败。 - 补充 VariablesConnectedEvent、StatusUpdatedEvent 的 Mock 设置 - Initialize_SetsInitializedTrue 增加 VariablesConnectedEvent(true) 发布断言 - 修正 TurnOff_PublishesClosedEvent 断言逻辑:Arrange 阶段 ConnectVariables/TurnOn 已产生一次 Closed 事件,需在 Act 前清空 Invocations 避免误判发布次数
This commit is contained in:
@@ -13,6 +13,8 @@ namespace XplorePlane.Tests.Hardware
|
||||
private readonly Mock<IEventAggregator> _mockEventAggregator;
|
||||
private readonly Mock<ILoggerService> _mockLogger;
|
||||
private readonly Mock<RaySourceStatusChangedEvent> _mockStatusEvent;
|
||||
private readonly Mock<VariablesConnectedEvent> _mockVariablesConnectedEvent;
|
||||
private readonly Mock<StatusUpdatedEvent> _mockStatusUpdatedEvent;
|
||||
private readonly SimulatedXRaySource _source;
|
||||
|
||||
public SimulatedXRaySourceTests()
|
||||
@@ -20,6 +22,8 @@ namespace XplorePlane.Tests.Hardware
|
||||
_mockEventAggregator = new Mock<IEventAggregator>();
|
||||
_mockLogger = new Mock<ILoggerService>();
|
||||
_mockStatusEvent = new Mock<RaySourceStatusChangedEvent>();
|
||||
_mockVariablesConnectedEvent = new Mock<VariablesConnectedEvent>();
|
||||
_mockStatusUpdatedEvent = new Mock<StatusUpdatedEvent>();
|
||||
|
||||
// Setup logger to return itself for ForModule<T>()
|
||||
_mockLogger.Setup(l => l.ForModule<SimulatedXRaySource>()).Returns(_mockLogger.Object);
|
||||
@@ -29,6 +33,18 @@ namespace XplorePlane.Tests.Hardware
|
||||
.Setup(ea => ea.GetEvent<RaySourceStatusChangedEvent>())
|
||||
.Returns(_mockStatusEvent.Object);
|
||||
|
||||
// ConnectVariables() 会发布 VariablesConnectedEvent,需要 Mock 该事件避免 NullReferenceException
|
||||
// ConnectVariables() publishes VariablesConnectedEvent, must mock it to avoid NullReferenceException
|
||||
_mockEventAggregator
|
||||
.Setup(ea => ea.GetEvent<VariablesConnectedEvent>())
|
||||
.Returns(_mockVariablesConnectedEvent.Object);
|
||||
|
||||
// TurnOn/TurnOff/SetVoltage/SetCurrent 会发布 StatusUpdatedEvent,同样需要 Mock
|
||||
// TurnOn/TurnOff/SetVoltage/SetCurrent publish StatusUpdatedEvent, also needs mocking
|
||||
_mockEventAggregator
|
||||
.Setup(ea => ea.GetEvent<StatusUpdatedEvent>())
|
||||
.Returns(_mockStatusUpdatedEvent.Object);
|
||||
|
||||
_source = new SimulatedXRaySource(_mockEventAggregator.Object, _mockLogger.Object);
|
||||
}
|
||||
|
||||
@@ -43,6 +59,10 @@ namespace XplorePlane.Tests.Hardware
|
||||
Assert.True(initResult.Success);
|
||||
Assert.True(connectResult.Success);
|
||||
Assert.True(_source.IsConnected);
|
||||
|
||||
// 验证 ConnectVariables 发布了 VariablesConnectedEvent(true)
|
||||
// Verify ConnectVariables published VariablesConnectedEvent(true)
|
||||
_mockVariablesConnectedEvent.Verify(e => e.Publish(true), Times.Once);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
@@ -70,6 +90,11 @@ namespace XplorePlane.Tests.Hardware
|
||||
_source.ConnectVariables();
|
||||
_source.TurnOn();
|
||||
|
||||
// ConnectVariables/TurnOn 阶段已经发布过 Closed/Opened 事件,清空调用记录避免影响 Act 阶段的断言
|
||||
// ConnectVariables/TurnOn already published Closed/Opened events during Arrange; clear invocations
|
||||
// so the Act-phase assertion only counts the publish triggered by TurnOff()
|
||||
_mockStatusEvent.Invocations.Clear();
|
||||
|
||||
// Act
|
||||
var result = _source.TurnOff();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user