首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在mock中为不同的输入返回不同的值?

如何在mock中为不同的输入返回不同的值?
EN

Stack Overflow用户
提问于 2018-09-11 02:24:48
回答 2查看 333关注 0票数 5
代码语言:javascript
运行
复制
[TestClass]
public class UnitTest1
{
    [TestMethod]
    public void TestMethod1()
    {
        var o1 = new XmlDocument();
        var o2 = new XmlDocument();

        var mock = new Mock<ITestInterface>();
        mock.Setup(m => m.TestMethod(o1)).Returns(1);
        mock.Setup(m => m.TestMethod(o2)).Returns(2);

        Assert.AreEqual(1, mock.Object.TestMethod(o1));
        Assert.AreEqual(2, mock.Object.TestMethod(o2));
    }
}

public interface ITestInterface
{
    int TestMethod(object input);
}

为什么mock总是返回第二个值?如果我将XmlDocument切换为其他任何东西(object、StringBuilder等),它将按预期工作。

EN

回答 2

Stack Overflow用户

发布于 2018-09-11 05:16:34

我会假设它也会像你预期的那样工作,但我也得到了同样的结果。但是,如果您按照下面的方式进行设置,它将按您所希望的那样工作。

代码语言:javascript
运行
复制
mock.Setup(m => m.TestMethod(It.Is<XmlDocument>(y => ReferenceEquals(o1, y)))).Returns(1);
mock.Setup(m => m.TestMethod(It.Is<XmlDocument>(y => ReferenceEquals(o2, y)))).Returns(2);

当我进一步测试时,我注意到另一件事是,如果你设置了InnerXml,一切都会像你最初设置的那样工作。

代码语言:javascript
运行
复制
var doc1 = new XmlDocument { InnerXml = "<root1 />" };
var doc2 = new XmlDocument { InnerXml = "<root2 />" };;
mock.Setup(x => x.TestMethod(doc1)).Returns(1);
mock.Setup(x => x.TestMethod(doc2)).Returns(2);

Console.WriteLine($"{mock.Object.TestMethod(doc1)}");
Console.WriteLine($"{mock.Object.TestMethod(doc2)}");

如果您将两个InnerXml值设置为相同的字符串,它甚至可以正常工作。这真的是一个谜,我无法解释它。

票数 3
EN

Stack Overflow用户

发布于 2018-09-11 05:56:07

我运行了你的代码,也遇到了同样的问题。在使用Message: Assert.AreEqual failed. Expected:<1>. Actual:<2>.的第一次断言中,完全按照您发布的方式运行代码会失败。当我将o1和o2更改为object而不是XmlDocument时,它按预期工作。

奇怪的是,将两个设置行更改为以下行将导致生成正确的结果:

代码语言:javascript
运行
复制
mock.Setup(m => m.TestMethod(It.Is<XmlDocument>(x => x == o1))).Returns(1);
mock.Setup(m => m.TestMethod(It.Is<XmlDocument>(x => x == o2))).Returns(2);

这很奇怪,因为我相信你的两个设置线应该和我的完全一样,但我的在这种情况下工作正常,而你的却不是。我假设有一个我不知道的差异,或者是Moq的错误导致了这一点。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52263472

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档