起订量设置覆盖

viv*_*k86 10 c# moq

我已经浏览了之前的所有答案,但没有一个能解决我的问题。

假设我有以下代码:

public interface ISomeInterface
{
    int SomeMethod(int a, string b);
}
Run Code Online (Sandbox Code Playgroud)

现在我有一个常见的模拟类,它定义了上述方法的一些默认行为

public class CommonMock
{
    public Mock<ISomeInterface> MockInterface = new Mock<ISomeInterface>().Setup(x => x.SomeMethod(It.IsAny<int>(), It.IsAny<string>())).Returns(It.IsAny<int>());
}
Run Code Online (Sandbox Code Playgroud)

我需要一些默认行为,因为我有很多需要默认行为的测试用例。

但在某些特定的测试场景中,在完全独立的测试类中,我需要能够在测试某些特定的测试用例时返回不同的值。

像下面这样:

[Test]
public void TestSomeMethodSpecific()
{
    var commonMock = new CommonMock();
    commonMock.MockInterface.Setup(x => x.SomeMethod(It.IsAny<int>(), It.IsAny<string>())).Returns(42);

    // Do some test based on the new return value
}
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

下面我附上一些实际代码:

通用设置

public class MockStore
{
    public Mock<IProcessHandler> ProcessHandler = new Mock<IProcessHandler>();
    ProcessHandler.Setup(x => x.GetCurrentProcessRunId()).Returns(It.IsAny<int>());
}
Run Code Online (Sandbox Code Playgroud)

测试类中覆盖的设置

var mockstore = new MockStore();
mockStore.ProcessHandler.Setup(x => x.GetCurrentProcessRunId()).Returns(25);
Run Code Online (Sandbox Code Playgroud)

大约有 50 到 70 个这样的模拟,每个模拟都从简单​​类型返回到复杂类。

Owe*_*ing 4

那应该有效吗?如果您在方法上创建后续设置并且它是无条件的(对参数没有限制),那么它将删除该方法的所有先前设置。

你可以在这里看到我的答案,它用源代码解释了它

如果您希望多个有条件的设置根据参数返回不同的值,请参阅如何使用模拟为不同的参数设置方法两次

在没有看到完整代码的情况下,也许您已经在使用条件设置。在这种情况下,顺序很重要,也许您正在用更通用的设置覆盖早期的设置。