Я бы предположил, что это будет работать так, как вы ожидали, но я также получаю те же результаты.Однако если вы вместо этого выполните настройку, как показано ниже, она будет работать так, как вы хотите.
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
установлены в одинаковые строки.Это действительно загадка, и я не смог ее объяснить.