所以我试图从另一个Mocked类型返回一个模拟类型,我已经取得了一些进展但是我被困在这里(界面名称已被简化)
考虑接口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
);
答案 0 :(得分:9)
这样的事情应该有效:
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; }
}