У меня есть метод, который ожидает набор строк и который я хочу смоделировать:
bool DoSomething(IEnumerable<string> myList) { ... }
Я хочу смоделировать каждый вызов этого метода, имеющий любую коллекцию со следующими элементами: ["DLKM"]
, не имеет значения, является ли тип коллекции массивом, списком или чем-то еще.
Для этого я создал средство сопоставления аргументов, используя NSubstitute:
var modellarten = Arg.Is<IEnumerable<string>>(x => !new[] { "DLKM" }.Except(x).Any());
, которое соответствует любой коллекции строк, которые содержат только строку "DLKM"
.
Это мой макет:
var mock = Substitute.For<IMyInterface>();
mock.DoSomething(modellarten).Returns(true);
Однако, как только я высмеиваю несколько методов, используя один и тот же аргумент arg-matcher, вызов DoSomething
возвращает значение по умолчанию false
:
var mock = Substitute.For<IMyInterface>();
mock.Init(modellarten).Returns(true);
mock.DoSomething(modellarten).Returns(true);
Итак, я полагаю, это связано с замыканием внутри совпадения. Но я не знаю, как смоделировать оба метода, не повторяя код для modellarten
:
var mock = Substitute.For<IMyInterface>();
mock.Init(Arg.Is<IEnumerable<string>>(x => !new[] { "DLKM" }.Except(x).Any())).Returns(true);
mock.DoSomething(Arg.Is<IEnumerable<string>>(x => !new[] { "DLKM" }.Except(x).Any())).Returns(true);