将接口模拟为多种类型

时间:2019-04-25 16:17:04

标签: c# moq xunit.net

为什么此代码不起作用?

var channelsList = new List<IChannel>
{
    Mock.Of<IChannel>(m => m == new ChannelOne()),
    Mock.Of<IChannel>(m => m == new ChannelTwo()),
};

1 个答案:

答案 0 :(得分:2)

假设IChannel被定义为:

public interface IChannel
{
    int DoWork();
    int DoOtherWork();
}

然后您可以使用Moq.Linq定义不同的行为,如下所示:

var channelsList = new List<IChannel>
{
    Mock.Of<IChannel>(m => m.DoWork() == 1 && m.DoOtherWork() == 1),
    Mock.Of<IChannel>(m => m.DoWork() == 2)
};

Assert.Equal(1, channelsList.First().DoWork());
Assert.Equal(2, channelsList.Last().DoWork());

但是有一个限制,例如您不能设置Throws ...


  

LINQ to Mocks非常适合快速找出通常不需要进一步验证的依赖项。如果以后确实需要验证这些模拟的某些调用,则可以使用Mock.Get(instance)轻松地检索它们。

注意: 强调我的

LINQ to Mocks