2016-11-06 7 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を使用して)テストします。 は私が脱退(上のアサート)となりました別のunittestのが必要

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

ANSWER: は、私はちょうど私と同じ問題を抱えているかもしれない人々のためのコードを追加している、説明のために以下のコメントを参照してください。 。

偽のクラス:

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がテストの最後に正しい値を持つことを確認します。コードで質問を編集します。 –