2012-04-03 4 views
0

Webサービス呼び出しを抽出して抽象化すると、オンラインであるWebサービスに頼らずに簡単にテストできるので、サービスによって自動的に呼び出されるイベントハンドラをどのように抽象化できますか?私が実行している問題は、(EWS)を使用しているAPIはすべてのクラスを内部的に扱うため、作成できないということです。これはユニットテストの際に問題になります。なぜなら、例えばイベントが起動されたときに、xy、およびzのように言うことができないからです。自分自身でWebサービスイベントを抽象化する

これらのイベントハンドラを自分で抽出して、簡単にモックできますか?

答えて

1

インターフェイスをサポートする独自のクラスでラップする必要があります。あなたのサービスの利用には、次のようになりますたとえば:

var service = new SomeService(); 
service.SomeEvent =+ (o, e) => DoSomething(e); 
service.DoStuff(); 

あなたは、インターフェイスを作成します:

public interface ISomeService 
{ 
    event EventHandler SomeEvent; 
    void DoStuff(); 
} 

そして、あなたの実装クラス:

public class SomeServiceWrapper : ISomeService 
{ 
    private readonly SomeService _containedService; 

    public event EventHandler SomeEvent; 

    public SomeServiceWrapper() 
    { 
     _containedService = new SomeService(); 
     _containedService.SomeEvent += (o, e) => RaiseSomeEvent(e); 
    } 

    public void DoStuff() 
    { 
     _containedService.DoStuff(); 
    } 

    private void RaiseSomeEvent(EventArgs e) 
    { 
     EventHandler evt = SomeEvent; 
     if (evt != null) 
     { 
      evt(this, e); 
     } 
    } 
} 

その後、あなたはダミーを作成することができますISomeService模擬や独自のダミークラスを使用して、ISomeServiceインスタンスSomeServiceWrapperを実稼働環境で使用します。

希望に役立ちます。

関連する問題