Макетирование интерфейса как более чем одного типа - PullRequest
0 голосов
/ 25 апреля 2019

Почему этот код не работает?

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

1 Ответ

2 голосов
/ 25 апреля 2019

Предполагая, что 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 .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...