Я новичок в Moq, и у меня возникла глупая проблема.Если я выполняю настройку на основе цикла, она не будет соответствовать, но если я выполню «одинаковую» настройку вручную, я получу совпадение.
Я использую Moq 4.0.10827 от NuGet
Мой интерфейс очень прост:
public interface IMyInterface
{
string GetValue(string input);
}
Вся программа тестирования приведена ниже.Ожидаемый вывод одинаков для обоих методов, но «Foo» не печатается для Version2 ()
Код:
class Program
{
static void Main(string[] args)
{
Version1();
Console.WriteLine("---------");
Version2();
Console.WriteLine("---------");
Console.ReadKey();
}
private static void Version1()
{
var mock = new Mock<IMyInterface>();
mock.Setup(x => x.GetValue(It.Is<string>(s => s == "Foo"))).Returns("Foo");
mock.Setup(x => x.GetValue(It.Is<string>(s => s == "Bar"))).Returns("Bar");
IMyInterface obj = mock.Object;
Console.WriteLine(obj.GetValue("Foo"));
Console.WriteLine(obj.GetValue("Bar"));
}
private static void Version2()
{
var mock = new Mock<IMyInterface>();
string[] keys = new string[] { "Foo", "Bar" };
foreach (string key in keys)
{
mock.Setup(x => x.GetValue(It.Is<string>(s => s == key))).Returns(key);
}
IMyInterface obj = mock.Object;
Console.WriteLine(obj.GetValue("Foo")); // Does not match anything
Console.WriteLine(obj.GetValue("Bar"));
}
}
Я так понимаю, я что-то упустил .. но что?
Вывод программы:
Foo
Bar
---------
Bar
---------
Редактировать: Вывод из программы