2016-11-21 14 views
0

私は、他のいくつかのWebサービスに依存する単体テストC#プロジェクトを持っていなければなりません。単体テストでは、サービスを呼び出すのではなく、ダミー値を返すだけです。私は現在シムを使用しようとしているが、私は問題に直面している。現在のコードは、外部Webサービスのクライアントを作成し、CSSFormTransformationClientの定義はSvcUtil.exeツールによって生成され、ユニットそれは依存しているWebサービスを分離して、C#.Net Webサービスをテストします

public System.IO.MemoryStream TransformToPDF(Mycompany.Enterprise.Reporting.ServiceReferences.CssTransformation.TransformRequest transformRequest) 
{ 
    return base.Channel.TransformToPDF(transformRequest); 
} 

を次のようにメソッドTransformToPDFを持っている方法

CSSFormTransformationClient client = new CSSFormTransformationClient(); 
MemoryStream stream = client.TransformToPDF(cssRequest); 

を呼び出します今私は、次の方法でシムを使用してtransformToPDFの戻り値を疑似できると仮定していました。誰かが私にtransformToPDFメソッドをどうやって模倣するのか教えてください。

ありがとうございました。

P.S - このプロジェクトはWCFを使用しています。

+0

私は偽のアセンブリとすべてを追加しました。これを行う正しい方法がありません。 –

+0

"私を許さない"と定義できますか?エラーやその他のメッセージが表示されますか?何が問題なのですか?また、Moqを試してみましたか? – Brandon

+0

@Brandon _ServiceReferences.CssTransformation.Fakes.ShimCSSFormTransformationClient.AllInstances_ この後、「equals」と「reference equals」の2つのオプションが表示されます。私が何か他のことをする場合は、VSは赤でそれを強調します。私はモックを試していない。そのようなサービスの分離にmoqがほとんど触れておらず、シムを超えていることを示唆していますか? –

答えて

0

私のコメントは:Moq(Available on NuGet)でこれを試してください。

using Moq; 
using TransformRequest = Mycompany.Enterprise.Reporting.ServiceReferences.CssTransformation.TransformRequest; 

private MemoryStream _toReturn; 

public void SetupTest() 
{ 
    this._toReturn = new MemoryStream();  
} 
public void TearDownTest() 
{ 
    if (this._toReturn != null) 
    { 
     this._toReturn.Dispose(); 
    } 
} 

public void YourTestMethod() 
{ 
    var client = new Mock<CSSFormTransformationClient>(); 

    client.Setup(c => c.TransformToPDF(It.IsAny<TransformRequest>()) 
      .Returns(this._toReturn); 

    MemoryStream stream = client.TransformToPDF(cssRequest); //Get cssRequest beforehand... I don't know where it came from. 

    //Continue with your test. 
} 
+0

いいえ!ありがとうございました!私は試してみましょう。 :) –

関連する問題