繁体   English   中英

为什么我的 Moq 没有返回 null?

[英]Why is my Moq not returning null?

我的 Moq 正在返回我不期望的数据。

var artist = new Artist();
artist.Id = "4576";
var deserializer = Mock.Of<IXmlDeserializer<Album>>(
    d => d.Deserialize("foo").Artist == artist);
Assert.IsNull(deserializer.Deserialize(null));

上述测试失败。

真正令人费解的是 mock 返回一个 Mock 但那

Assert.AreEqual("4576", deserializer.Deserialize(null).Artist.Id)

返回真。

就好像我的模拟为未指定的参数(在这种情况下为 null)返回的“默认值”在某种程度上受到了我在用“foo”调用时告诉它返回的内容的影响。

你可以写:

var artist = new Artist { Id = "4576" };
var mock = new Mock<IXmlDeserializer<Album>>();
mock.Setup(x => x.Deserialize(It.Is<string>(i => i == "foo"))).Returns(new Album() { Artist = artist });

var deserializer = mock.Object;

Assert.IsNull(deserializer.Deserialize(null));
Assert.IsNotNull(deserializer.Deserialize("foo"));

或者使用 Mock.Of() 语法,上面将是:

var artist = new Artist { Id = "4576" };
var deserializer = Mock.Of<IXmlDeserializer<Album>>(d => d.Deserialize(It.Is<string>(i => i == "foo")) == Mock.Of<Album>(album => album.Artist == artist));

Assert.IsNull(deserializer.Deserialize(null));
Assert.IsNotNull(deserializer.Deserialize("foo"));
Assert.AreEqual("4576", deserializer.Deserialize("foo").Artist.Id);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM