MOQ如果方法设置相交会发生什么?

时间:2016-09-01 16:15:28

标签: c# unit-testing moq

如果您愿意,两个设置相交或重叠时会发生什么。

例如,在下面的场景中,设置重叠,因为显然"aSpecificString"也被视为任何字符串。

Interface ISomeInterface
{
    int SomeMethod(string param);
}

[TestMethod]
public void SomeClass_ShouldBehaveProperly_GivenSomeScenario()
{
    var mock = new Mock<ISomeInterface>(MockBehavior.Strict);
    mock.Setup(m => m.SomeMethod("aSpecificString"))
        .Returns(100);
    mock.Setup(m => m.SomeMethod(It.IsAny<string>()))
        .Returns(0);

    /*the rest of the test*/
}

我想知道它相交时会发生什么。

它是否会抛出异常,或者是否无法检测到重叠并按照添加顺序使用第一个匹配的设置?

我认为避免重叠设置是最好的。

2 个答案:

答案 0 :(得分:5)

不要沿着你要走的路走下去。我只看到了大量的痛苦。相反,请使您的Return有条件:

mock.Setup(m => m.SomeMethod(It.IsAny<string>()))
    .Returns((string parameter) => parameter == "aSpecificString" ? 100 : 0);

我希望在您开始制作重要代码之前,我已设法与您联系......

答案 1 :(得分:2)

根据在线发现的文件,最后一次通话赢得并取消之前的通话。

所以即使在你的情况下,如果测试是打电话

SomeMethod("aSpecificString")

它会根据您示例中的设置返回0