2012-04-24 19 views
8

を使用して別の嘲笑のタイプから戻り値の型のモックだから私は、私はいくつかの進歩を遂げてきましたが、私は部品番号

(インターフェース名が簡素化されました)ここにこだわって、他の嘲笑のタイプから嘲笑タイプを返すようにしようとしています

インターフェイスIFooとIFooItemを考えてみましょう。 IFooタイプに追加呼び出すと、IBARに渡しても、私はので、私はアイテムを追加する模擬することができますモックする部品番号を使用しようとしているIFooRepositoryを、持っているIFooItem

interface IFoo 
{ 
    IFooItem Add(IBar bar); 
} 

interface IFooItem 
{ 
    int fooItemId {get; set;} 
} 

を返します。

ので、このような

var mockFooRepository = new Mock<IFooRepository>(); 
mockFooRepository.Setup(m=> m.Add(It.IsAny<IBar>())) 
    .Returns(
    // What is the correct way to mock properties of a new IFooItem from 
    // mocked properties of IBar 
    // essentially a new mocked type of IFooItem that can read from IBar 
    // so IFooItem.Property = somevalue, IFooItem.Property2 = IBar.SomeProp 
    ); 
+0

var mockFooRepository = new Mock<IFooRepository>(); mockFooRepository.Setup(r => r.Add(It.IsAny<IBar>())) .Returns<IBar>(bar => { var item = new Mock<IFooItem>(); item .Setup(i => i.fooItemId) .Returns(bar.Id); return item.Object; }); 

これはIBarはこのようになっていることを前提としています。模倣されたオブジェクト間の依存関係を作成するのは賢明ではないようです。テスト対象のクラスによって参照されるプロパティを明示的に模擬して設定するだけです。 'IFooItem.Property2'と' IBar.SomeProp'が常に同じになる場合は、同じものを設定してください。 – bhamlin

答えて

8

何かが動作するはずです:私はこれをしないと言うでしょう

public interface IBar 
{ 
    int Id { get; set; } 
} 
関連する問題