web-dev-qa-db-ja.com

値がモックの別のプロパティに依存する読み取り専用プロパティをモックする方法

(タグで示されているように、私はmoqを使用しています)。

私はこのようなインターフェースを持っています:

interface ISource
{
  string Name { get; set; }
  int Id { get; set; }
}

interface IExample
{
  string Name { get; }
  ISource Source { get; set; }
}

私のアプリケーションでは、IExampleの具象インスタンスは、ソースとしてDTO(IDataTransferObject)を受け入れます。 IExampleの具体的な実装に関するいくつかのプロパティは、単にソースに委任されます。このような...

class Example : IExample
{
  IDataTransferObject Source { get; set; }

  string Name { get { return _data.Name; } }
}

IExampleのスタンドアロンモックを作成し(スタンドアロンとは、テスト中にIExampleモックのインスタンスがいくつか作成されるため、キャプチャされた変数を使用できないことを意味します)、IExample.Nameがの値を返すようにモックを設定します。 IExample.Source.Name。だから、私はこのようなモックを作成したいと思います:

var example = new Mock<IExample>();
example.SetupProperty(ex => ex.Source);
example.SetupGet(ex => ex.Name).Returns(what can I put here to return ex.Source.Name);

基本的に、1つのプロパティの値として、モックのサブオブジェクトのプロパティの値を返すようにモックを構成したいと思います。

ありがとう。

23
wageoghe

あなたはおそらく使用することができます:

example.SetupGet(ex => ex.Name).Returns(() => example.Object.Source.Name);

返される値は、プロパティにアクセスしたときに決定され、モックのNameプロパティのSourceプロパティから取得されます。

44
Iridium