2011-07-26 17 views
2

私はmoqを使用して、擬似インタフェースのメソッドに渡されるパラメータを検証するのに苦労しています。問題は、ラムダexpresion内(以前に設定した)configurationMockのすべてのプロパティがnullで、「It.Is」のために生成したことであるmoqとパラメータの一致

MockRepository mockRepository = new MockRepository(MockBehavior.Default); 

Mock<IConfigurationUpdater> workerInstanceMock = mockRepository.Create<IConfigurationUpdater>(); 
Mock<IConfiguration> configurationMock = mockRepository.Create<IConfiguration>(); 

configurationMock.Setup(t => t.Folder).Returns("Folder"); 
configurationMock.Setup(t => t.FileName).Returns("FileName"); 

workerInstanceMock 
    .Setup(
      x => x.DoSomeWork(
       It.Is<string>(
        t => t == Path.Combine(configurationMock.Object.Folder, configurationMock.Object.FileName)))) 
    .Verifiable("DoSomeWork not properly called"); 

    mockRepository.VerifyAll(); 

:私のようなコードを持っています。 (もし私が "Path.Combine"を文字列にすると、それはうまくいく)。 この正確なケースでは、「Path.Combine」はnullパラメータを受け取ったため失敗しています。

mockを適切に使用し、正しいパラメータでインターフェイスが呼び出されたことを確認する方法を教えてください。

おかげで、 フローリン

+0

Pathのみを使用します.Combineは、別のコンテキストでlamba式を実行するように見えるので、この動作を取得します。 "It.Is (t => t == savConfigurationMock.Object.LiveUpdateFolder +" \\ "+ savConfigurationMock.Object.LiveUpdateMergeConfigFile)"を使用するか、プロパティに入れることでファイルのみが動作します。 – florin

答えて

0

私はあなたが自動的に(スタブ)を、その値の追跡を開始しますMOQプロパティを使用する必要があると思います。

の代わりに:

configurationMock.Setup(t => t.Folder).Returns("Folder"); 
configurationMock.Setup(t => t.FileName).Returns("FileName"); 

あなたは

configurationMock.SetupProperty(t => t.Folder, "Folder"); 
configurationMock.SetupProperty(t => t.FileName, "FileName"); 

を使用して、あなたが行ったようにプロパティにアクセスすることができます

MOQの性質上
configurationMock.Object.Folder 

詳細はここで見つけることができます:http://code.google.com/p/moq/wiki/QuickStart#Properties

+0

動作しません。同じ動作をします。ラムダ(It.Is ...)の内部では、プロパティはnullを返します。 – florin

+0

おそらくこれは愚かな質問ですが、私は尋ねます:FolderとFileNameはIConfigurationインターフェイスのプロパティとして宣言されていますか?私はゲットを意味する。設定します。構文? – Diego

+0

はい(IConfigurationは確かにiterfaceではありません:))。最初はgetterしか持っていなかったので、sugestionを試してみたところでsetterも追加されました(SetupPropertyはスタブを作成するためにsetterが必要です)。 – florin

関連する問題