Почему не удается установить / проверить сопоставление Moq, когда It.Is… () вызывается из анонимная функция

Я столкнулся с некоторым странным поведением при попытке упростить создание довольно сложного дерева выражений для настройки / проверки соответствия с помощью 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>();
}

Edit: Я знаю о Mock.Of <..> (..) и обычно предпочитаю его использовать, но в данном случае это не вариант.

5
задан drstevens 27 October 2011 в 21:29
поделиться