2011-08-11 4 views
3

WCFエンドポイントではなく、従来のSOAP Web参照であるDynamics Crm Webサービスに依存するビジュアルスタジオクラスライブラリ(.NET 2.0)プロジェクトがあります。私はそれらのビジネスルールの後ろに本当のcrmインスタンスを持たずにそれらのビジネスルールを単体テストしたい。 Web参照を追加しても、私が偽造できるインターフェースは作成されません。それは、私がインターフェイスを作成することができます私は偽造することができると思う私のプロジェクトでは、C#を生成します。私は実際にHTTPを操作してプロトコルのすべてに入る必要はないと思う。クライアントレイヤーユニットテストのためのWebサービスのモック

私はJoh Skeetのblog postを見ました。ああ、私はコードを書いたくないので、それ以来役立つかもしれないツールが書かれていることを期待しています。私は彼の歩みのいくつかを試しましたが、彼は私より賢いと結論づけ、私はその仕事をすることができませんでした。

私はSoapUIを知っていますが、私はCIビルド環境で動作する純粋な単体テストを期待していました。

これを行う方法はありますか?

答えて

3

インターフェイスに付属していないものを模倣する標準的な方法は、独自のラッパーを構築することです。

public interface IWebServiceClient 
{ 
    string MethodYouUse(); 
} 

とコンクリートラッパー:あなたは、あなたが必要なコードのビットだけカバーインターフェースを作る

class AutoGeneratedStuff 
{ 
    public string GeneratedMethodYouUse() 
    {...} 
    public string GeneratedMethodYouDontNeed() 
    {...} 
} 

あなたはモックとしたいコードは、Webサービスのものを言いますそれを実装するクラスであり、生成されたものに依存します。

class WebServiceClient : IWebServiceClient 
{ 
    private AutoGeneratedStuff _stuff; 

    public WebService(AutogeneratedStuff stuff) 
    { 
     _stuff = stuff; 
    } 

    public string MethodYouUse() 
    { 
     return _stuff.MethodYouUse(); 
    } 
} 

あなたが生成されたクラスを呼び出したときに、あなたのインターフェースを呼び出してください。あなたの単体テストでは、モックフレームワークを使って、または生成されたものに依存しない別の具体的なクラスとインターフェイスを実装することによって、インターフェイスをモックできます

+0

素敵な説明、以前に投票された – SwissCoder

関連する問題