Prism TDD Unsubscribe()
本文关键字:Unsubscribe TDD Prism | 更新日期: 2023-09-27 18:16:27
我正在使用TDD,并希望为PubSubEvent中可用的Unsubscribe()方法编写一个单元测试。因为没有接口作为你从父类继承的,父类没有接口,所以我不知道如何测试它。
我的服务和方法,我想测试一下:
public class FrameService: IFrameService
{
private readonly IEventAggregator _eventAggregator;
public void UnsubscribeEvents()
{
_eventAgregator.GetEvent<FrameAddedEvent>()
.Unsubscribe(FrameAddedEventHandler); // How to unit test this?
}
}
FrameAddedEvent类,继承自Prism库中的PubSubEvent:
public class FrameAddedEvent: PubSubEvent<Frame>
{
}
在Prism库中的声明:
public class PubSubEvent<TPayload> : EventBase
{
public SubscriptionToken Subscribe(Action<TPayload> action);
}
我对代码行的第一部分的测试(使用MSTest和Moq)。现在我需要另一个UnitTest,在Unsubscribe()
上断言[TestClass]
public class FrameServiceTest
{
private Mock<IEventAgregator> _eventAgregator;
[TestMethod]
public void When_SubscribeEvents_Then_Get_FrameAddedEvent_From_EventAggregator()
{
var frameAddedEvent = new FrameAddedEvent();
_eventAgregator.Setup(x=>x.GetEvent<FrameAddedEvent>())
.Returns(frameAddedEvent);
_frameService.SubscribeEvents();
_serviceLayerEventAgregator.Verify(x => x.GetEvent<FrameAddedEvent>(), Times.Once);
}
}
答:请看下面的解释,我只是为那些可能和我有同样问题的人添加了代码。
伪类:
public class FakeFrameAddedEvent : FrameAddedEvent
{
public bool Unsubscribed { get; private set; }
public FakeFrameAddedEvent()
{
Unsubscribed = false;
}
public override void Unsubscribe(Action<Frame> subscriber)
{
Unsubscribed = true;
}
}
和新的UnitTest:
[TestMethod]
public void When_UnsubscribeEvents_Then_Unsubscribe_Is_Call()
{
var frameAddedEvent = new FakeFrameAddedEvent();
_serviceLayerEventAgregator.Setup(x => x.GetEvent<FrameAddedEvent>())
.Returns(frameAddedEvent);
_frameService.UnsubscribeEvents();
Check.That(frameAddedEvent.Unsubscribed).IsTrue();
}
首先,PubSubEvent
是prism的一部分,它带来了自己的一组测试,所以我怀疑您是否有必要为此编写自己的测试。
话虽这么说,您可以测试EventAggregator
周围的东西,包括您自己的事件,例如: