2011-09-13 4 views
10

私が使用した他のモックフレームワークがIMHOに挑戦しているので、Moqが新しいプロジェクトで使用したいものかどうかを確認しようとしています。だから、例えば、私のような方法があります。新参者が列挙可能なメソッドにMoqを使用しようとしています

IEnumerable<PickList> GetPickLists(); 

を私はこのような何かを試してみた...私はこれをモックになってるかどうかはわかりませんが、私は(コンパイルにエラーを取得しています私は、次の 戻り値を()正しくないですけど、返し本体に入れるために何を把握することはできません。

CustomerSyncResult ApplyActions(IEnumerable<CustomerAction> actions); 
IEnumerable<Customer> GetCustomers(IEnumerable<string> crmIDs, IEnumerable<string> emails); 
:これらの2つの方法のようなものを模擬しようとし、また

var mockCrm = new Mock<ICrmProvider>(); 
mockCrm.Setup<IEnumerable<PickList>>(foo => foo.GetPickLists()) 
       .Returns<IEnumerable<PickList>>({}); 

私が知っていることを知っているgブランケットの質問ですが、私は時間の始まりを始めています。ダウンロードのCHMには私にとって十分なサンプルがありません。チュートリアルのいくつかは古いメソッドを使用しているように見えるだけでなく、列挙を扱っていないようです。(

ヒント。

答えて

11

QuickStartが良い参考です

mockCrm.Setup(x => x.GetPickLists()) 
    .Returns(new List<PickList>()); 

を試してみて、他の方法について

いくつかの例:。

mockCrm.Setup(x => x.ApplyActions(It.IsAny<IEnumerable>())) 
    .Returns(new CustomerSyncResult()); 

mockCrm.Setup(x => x.GetCustomers(It.IsAny<IEnumerable>(), 
            It.IsAny<IEnumerable>())) 
    .Returns(new List<Customers>()); 

さらに、型の安全性を高めるために、元のインターフェイスでIEnumerableジェネリックを作成してください。

ます。また、新しい部品番号v4の機能仕様を使用することができますだけでなく、現在文書化されていません

var list = new List<PickList> { new PickList() }; 

ICrmProvider crm = 
    Mock.Of<ICrmProvider>(
     x => 
     x.GetPickLists() == list); 

mock.Objectを書く必要はなくなりました。いくつかのリンク:

正確な構文(It.Isを使用して、リストなどの内容は)あなたが達成しようとしているものに依存します。 It.IsAnyは任意の引数にマッチします。これにより、シーケンスやコレクションのパラメータを扱う際の作業が簡単になります。

+0

恐ろしい...ありがとう!ゲル化し始めます... –

+0

それにこだわる;それは素晴らしい図書館です。 DLLを[LINQPad](http://www.linqpad.net/)にインポートして、好きなように模擬して遊ぶことができます。 – TrueWill

+0

フォローアップの質問...あなたが嘲笑しているオブジェクトにコンストラクタのパラメータが必要な場合はどうなりますか?たとえば、次のようになります。 public CustomerSyncEngine(ILoggingProvider、loggingProvider、ICrmProvider、crmProvider、ICacheProvider cacheProvider) コンストラクタのパラメータはどのようにして取得できますか? –

関連する問題