[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等),它将按预期工作。
发布于 2018-09-11 05:56:07
我运行了你的代码,也遇到了同样的问题。在使用Message: Assert.AreEqual failed. Expected:<1>. Actual:<2>.的第一次断言中,完全按照您发布的方式运行代码会失败。当我将o1和o2更改为object而不是XmlDocument时,它按预期工作。
奇怪的是,将两个设置行更改为以下行将导致生成正确的结果:
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的错误导致了这一点。
https://stackoverflow.com/questions/52263472
复制相似问题