Я столкнулся с каким-то странным поведением при попытке упростить создание довольно сложного дерева выражений для настройки / проверки соответствия с помощью moq.
Предположим, я издеваюсь над простым интерфейсом, определенным ниже
public interface IService
{
int Send(int value);
}
Следующий код представляет 5 тестов.Один тест для каждого из mockSender.Setup(...)
.Может кто-нибудь объяснить, почему тесты, помеченные как неудачные, терпят неудачу?
[Test]
public void TestInlineSetup()
{
const int expected = 5;
var mockSender = new Mock<IService>(MockBehavior.Loose);
//passes
mockSender.Setup(s => s.Send(It.IsAny<int>())).Returns(expected);
//fails
var sendMatch = It.IsAny<int>();
mockSender.Setup(s => s.Send(sendMatch)).Returns(expected);
//passes
mockSender.Setup(s => s.Send(SendMatchFromMethod())).Returns(expected);
//fails
var sendMatch = SendMatchFromMethod();
mockSender.Setup(s => s.Send(sendMatch)).Returns(expected);
//fails (this is somewhat contrived, but I have reasons for wanting to curry this)
mockSender.Setup(s => s.Send(SendMatchFromCurriedMethod()())).Returns(expected);
Assert.That(mockSender.Object.Send(expected), Is.EqualTo(expected));
}
public static int SendMatchFromMethod()
{
return It.IsAny<int>();
}
public static Func<int> SendMatchFromCurriedMethod()
{
return () => It.IsAny<int>();
}
Редактировать: я знаю о Mock.Of <..> (..) и обычно предпочитаю использовать его, но в данном случае это не таквариант.