C# 将接口模拟为多个类型

C# 将接口模拟为多个类型,c#,moq,xunit.net,C#,Moq,Xunit.net,为什么这个代码不起作用 var channelsList = new List<IChannel> { Mock.Of<IChannel>(m => m == new ChannelOne()), Mock.Of<IChannel>(m => m == new ChannelTwo()), }; var channelsList=新列表 { Mock.Of(m=>m==newchannelone()), Mock.Of(m=>m=

为什么这个代码不起作用

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

假设
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());
var channelsList=新列表
{
Mock.Of(m=>m.DoWork()==1和&m.DoOtherWork()==1),
Mock.Of(m=>m.DoWork()==2)
};
Assert.Equal(1,channelsList.First().DoWork());
Assert.Equal(2,channelsList.Last().DoWork());
但是,有一个限制,例如,您不能设置
抛出


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

注:强调我的


.

因为这不是它应该被使用的方式。参考资料。你到底想要实现什么?这可能是一个。我正在尝试装饰DI
IEnumerable
@anatol你能分享
IChannel
界面吗?不同的实现意味着什么?哪种方法应该不同?anatol不必担心。发生在我们所有人身上。这就是为什么当我们忘记的时候,我们必须如此的参考。快乐编码。