2016-11-06 3 views
1

Я использую 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(); 
    } 

ответ

1

Прежде всего, PubSubEvent является частью призмы и приносит свой собственный набор тестов, поэтому я сомневаюсь в необходимости для вас, чтобы написать свои собственные тесты для этого.

Это, как говорится, вы можете тест вещи вокруг EventAggregator, в том числе собственных событий, см this, например.

+0

Спасибо за ответ, я понимаю, что это призменная функция. Я не хочу тестировать сам метод Unsubscribe(), но убедитесь, что это вызов. Это единственный способ убедиться, что код ведет себя так, как должен. –

+0

Я использовал пример, который вы мне дали в ссылке. Я просто создал поддельный класс. переопределить метод Unsubcribe() для установки bool и проверить, имеет ли значение bool правильное значение в конце теста. Я отредактирую свой вопрос с кодом. –

Смежные вопросы