2016-11-06 8 views
1

TDD를 사용하고 있으며 PubSubEvent에서 사용할 수있는 Unsubscribe() 메소드에 대한 단위 테스트를 작성하려고합니다. 인터페이스가없는 상위 클래스로부터 상속받을 인터페이스가 없으므로 테스트 방법을 모르겠습니다.Prism TDD Unsubscribe()

내 서비스와 방법, 나는 시험에 싶습니다

public class FrameService: IFrameService 
{ 
    private readonly IEventAggregator _eventAggregator; 

    public void UnsubscribeEvents() 
    { 
     _eventAgregator.GetEvent<FrameAddedEvent>() 
         .Unsubscribe(FrameAddedEventHandler); // How to unit test this? 
     } 
} 

FrameAddedEvent 클래스, 프리즘 라이브러리에서 PubSubEvent에서 상속 : 프리즘의 라이브러리에

public class FrameAddedEvent: PubSubEvent<Frame> 
{ 
} 

선언 :

public class PubSubEvent<TPayload> : EventBase 
{ 
    public SubscriptionToken Subscribe(Action<TPayload> action); 
} 

코드 줄의 첫 번째 부분에 대한 내 테스트 (MSTest 및 Moq 사용). 나는 구독 취소 (에 어설)와 지금 다른 유닛 테스트가 필요

[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; 
    } 
} 

그리고 새로운 유닛 테스트 : 모든

[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이 테스트 마지막에 올바른 값을 가지는지 확인합니다. 내 질문을 코드로 편집합니다. –