使用Moq,我想要Setup()一个调用,这样它总是返回null,无论提供什么参数。
我这样做:
_myMock.Setup(mock => mock.MyMethod(
It.IsAny<int?>(),
It.IsAny<String>(),
It.IsAny<String>(),
It.IsAny<String>())).
Returns((IList<Item>)null
);
很简单,只需返回null。 我可以更简单吗?
答案 0 :(得分:4)
只是不要进行设置,使用默认的MockBehavior.Loose它将返回默认值 - 类为null,数字为0,结构的默认值。
警告:如果返回类型是IEnumerable或Array,它将返回并清空set,而不是null。在这种情况下,您需要一个显式设置。
很奇怪,它不会返回空IList,因为IList是IEnumerable。可能这是一个错误,但无论如何,适用于你所要求的:)
这两个例子都有用(除了Moq之外还使用FluentAssertions和NUnit):
public interface ISomeDummy
{
IList<int> Nums(int i);
}
[Test]
public void NullSetupTestWithMockOf()
{
var mock = Mock.Of<ISomeDummy>();
var items = mock.Nums(1);
items.Should().BeNull();
}
[Test]
public void NullSetupTestWithoutSetup()
{
var mock = new Mock<ISomeDummy>();
var items = mock.Object.Nums(1);
items.Should().BeNull();
}
答案 1 :(得分:0)