C# 如何在MOQ中检索被覆盖的行为?

C# 如何在MOQ中检索被覆盖的行为?,c#,moq,C#,Moq,我想知道是否有可能检索设置行为并在它被覆盖后恢复。在伪代码中,它可能如下所示: mediator.Setup(m => m.Fetch(It.IsAny<Query>())).Returns(() => Action1()); // setup 1 // catch here setup 1 mediator.Setup(m => m.Fetch(It.IsAny<Query>())).Returns(() => Action2()); //

我想知道是否有可能检索设置行为并在它被覆盖后恢复。在伪代码中,它可能如下所示:

mediator.Setup(m => m.Fetch(It.IsAny<Query>())).Returns(() => Action1()); // setup 1

// catch here setup 1

mediator.Setup(m => m.Fetch(It.IsAny<Query>())).Returns(() => Action2()); // setup 2

// restore setup 1 here

你们看到解决方案了吗?

也许,我不理解这个问题,但这里是NUnit示例-所有东西都是开箱即用的

[TestFixture]
public class TestClass
{
    private const int BASE_VALUE = -1;
    private const int FIRST_MOCK_VALUE = 1;
    private const int SECOND_MOCK_VALUE = 2;

    public class Foo
    {
        public virtual int Bar()
        {
            return BASE_VALUE;
        }
    }

    [Test]
    public void Test()
    {
        var mock = new Mock<Foo>();
        mock.CallBase = true;
        var mockedObject = mock.Object;

        int actualValue = mockedObject.Bar();
        Assert.AreEqual(BASE_VALUE, actualValue);

        mock.Setup(m => m.Bar()).Returns(FIRST_MOCK_VALUE);
        actualValue = mockedObject.Bar();
        Assert.AreEqual(FIRST_MOCK_VALUE, actualValue);

        mock.Setup(m => m.Bar()).Returns(SECOND_MOCK_VALUE);
        actualValue = mockedObject.Bar();
        Assert.AreEqual(SECOND_MOCK_VALUE, actualValue);
    }
}

setup方法是与一起使用的调用

System.Linq.Expressions.Expression<System.Func<T, TResult>>

您可以将其用作参数,并将单独的表达式保存在列表或字典中,以便于访问

我不明白这个问题。你能发布测试中的代码和测试本身吗?最后一次安装成功。这意味着,无论何时调用setup is,都会覆盖先前匹配的设置。所以基本上你的问题是可以开箱即用的是,上一个安装程序获胜,但我想问的是,是否可以在覆盖之前保留第一个安装程序,然后在以后恢复。如果您能给出一些指示,说明为什么要这样做,或者您正试图用它解决什么问题,这将非常有帮助。@Krzysztof您所要求的内容超出了该框架的功能集。您可以尝试在github中为该项目筹集资金。在这里,没有什么可以做的了。
System.Linq.Expressions.Expression<System.Func<T, TResult>>