11

だから私は別のモックタイプからモックタイプを返そうとしています、私はいくつかの進歩を遂げましたが、私はここで立ち往生しています(インターフェース名は単純化されています)

インターフェイスIFooおよびIFooItemについて考えてみます。IFooタイプでAddを呼び出し、IBarを渡すと、IFooItemが返されます。

interface IFoo
{
   IFooItem Add(IBar bar);
}

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

また、IFooRepositoryがあります。これは、Moqを使用してモックを作成し、アイテムの追加をモックできるようにしようとしています。

それで、

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
     );
4

1 に答える 1

13

このようなものが動作するはずです:

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ます。

public interface IBar 
{
    int Id { get; set; }
}
于 2012-04-25T00:20:41.080 に答える