简体   繁体   English

使用Moq从另一个Mocked类型模拟返回类型

[英]Mocking a return type from another Mocked type using Moq

So I'm trying to return a mocked type from another Mocked type, I've made some progress but I'm stuck here (interface names have been simplified) 所以我试图从另一个Mocked类型返回一个模拟类型,我已经取得了一些进展但是我被困在这里(界面名称已被简化)

Consider the interface IFoo and IFooItem. 考虑接口IFoo和IFooItem。 Calling Add on an IFoo type, passing in an IBar returns an IFooItem 在IFoo类型上调用Add,传入IBar会返回一个IFooItem

interface IFoo
{
   IFooItem Add(IBar bar);
}

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

Also I have a IFooRepository, which I'm trying to use Moq to mock so I can mock adding an item. 我还有一个IFooRepository,我正在尝试使用Moq来模拟,所以我可以模拟添加一个项目。

So, 所以,

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

Something like this should work: 这样的事情应该有效:

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

This assumes that IBar looks like this: 这假设IBar看起来像这样:

public interface IBar 
{
    int Id { get; set; }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM