c# – 如何在mock中为不同的输入返回不同的值?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – 如何在mock中为不同的输入返回不同的值?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1298字,纯文字阅读大概需要2分钟。
内容图文
![c# – 如何在mock中为不同的输入返回不同的值?](/upload/InfoBanner/zyjiaocheng/822/049f6d7f327c4f0aa3ff3ae5161b227c.jpg)
[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);
}
为什么模拟总是返回第二个值?如果我将XmlDocument切换到其他任何东西(对象,StringBuilder等),它将按预期工作.
解决方法:
我原以为它会像你期望的那样工作,但我也得到了相同的结果.但是,如果你改为如下设置,它将按你的意愿工作.
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,一切都可以像你最初设置的那样工作.
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值都设置为相同的字符串,它甚至可以工作.它真的是一个谜,我一直无法解释它.
内容总结
以上是互联网集市为您收集整理的c# – 如何在mock中为不同的输入返回不同的值?全部内容,希望文章能够帮你解决c# – 如何在mock中为不同的输入返回不同的值?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。