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)
轻松检索它们
注:强调我的
.因为这不是它应该被使用的方式。参考资料。你到底想要实现什么?这可能是一个。我正在尝试装饰DIIEnumerable
@anatol你能分享IChannel
界面吗?不同的实现意味着什么?哪种方法应该不同?anatol不必担心。发生在我们所有人身上。这就是为什么当我们忘记的时候,我们必须如此的参考。快乐编码。