Я использую TDD и хочу написать единичный тест для метода Unsubscribe(), доступного в PubSubEvent. Потому что нет интерфейса, который вы наследуете от родительского класса, у которого нет интерфейса, поэтому я не знаю, как его проверить.Prism TDD Отказаться от подписки()
Моя служба и метод, я хотел бы тест:
public class FrameService: IFrameService
{
private readonly IEventAggregator _eventAggregator;
public void UnsubscribeEvents()
{
_eventAgregator.GetEvent<FrameAddedEvent>()
.Unsubscribe(FrameAddedEventHandler); // How to unit test this?
}
}
Класс FrameAddedEvent, который наследует от PubSubEvent из Prism библиотеки:
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();
}
Спасибо за ответ, я понимаю, что это призменная функция. Я не хочу тестировать сам метод Unsubscribe(), но убедитесь, что это вызов. Это единственный способ убедиться, что код ведет себя так, как должен. –
Я использовал пример, который вы мне дали в ссылке. Я просто создал поддельный класс. переопределить метод Unsubcribe() для установки bool и проверить, имеет ли значение bool правильное значение в конце теста. Я отредактирую свой вопрос с кодом. –