将接口模拟为多种类型

问题描述 投票:-2回答:1

为什么这段代码不起作用?

var channelsList = new List<IChannel>
{
    Mock.Of<IChannel>(m => m == new ChannelOne()),
    Mock.Of<IChannel>(m => m == new ChannelTwo()),
};
c# moq xunit.net
1个回答
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

© www.soinside.com 2019 - 2024. All rights reserved.