2012-02-24 7 views
5

呼び出された場合は、ここで私が持っているものです:テスト中のRhinoのモックIgnoreArguments()とテストラムダが正しく

public interface IDataCenterMsmqWriter 
    { 
     void UpdateData(Action<DataCenterWcfProxy> action); 
    } 

システム:

public class WcfService : IWcfService 
{ 
    private readonly IDataCenterMsmqWriter _writer; 

    public WcfService(IDataCenterMsmqWriter writer) 
    { 
     _writer = writer; 
    } 

    #region IWcfService members 

    public void SendData(SomeData data) 
    { 
     _writer.UpdateData(d => d.SendVarData(data)); 
    } 

    // other members of IWcfService elided 
    #endregion 
} 

私のように_writer設定RhinoのモックをテストするにはどうすればよいですMockを使用し、正しいActionがUpdateDataメソッドで呼び出されたことをテストしたい。

私はこれを試してみた:

// _writer is setup as a mock 
var data = new SomeData(); 
_wcfServiceSUT.SendData(data); 
_writer.AssertWasCalled(d => d.UpdateData(x => x.SendVarData(data)); 

は動作しません。

私が追加することができます。

、P => AssertWasCalled内部にupdateData後p.IgnoreArguments()が、それは確かSendVarDataはデータ変数と呼ばれていた作るために、私が欲しいものを私に与えるものではありません。

私はこれを見てきました:

How to assert that an action was called

が、私の行動は、彼の例ではmockDialogServiceのように嘲笑されていません。

正しい入力パラメータなどでActionまたはFuncが正しく呼び出されたかどうかをテストする方法はありますか?

+0

'DataCenterWcfProxy.SendVarData()'は仮想メソッドですか、あるいはインターフェースを配置することはできますか? – Jeroen

+0

いいえ、WCFでシリアル化するインターフェイスのパブリックメソッドです。 –

+0

'DataCenterWcfProxy'で実装され、' IDataCenterMsmqWriter'の 'Update'メソッドで使用されるインタフェース' IDataCenterWcfProxy'を追加するオプションですか? – Jeroen

答えて

1

にupdateDataはそうサイモックメソッド

1

を上書きすることはできませんアクションかのFuncが正しいパラメータで呼び出されたことを確認するための最良の方法は.WhenCalled extensionを使用することです仮想でなければなりません。例は、 Google groups discussionにあります。

この例ではなく、期待が満たされている実際の出力対期待活用する方法を示しています。

関連する問題