在Moq中,有一种简单的方法可以使Setup()返回null,而不管所有提供的参数是什么?

时间:2013-05-29 09:24:12

标签: unit-testing null installation moq

使用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。 我可以更简单吗?

2 个答案:

答案 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)

不,你不能。你的方法需要四个参数,所以你必须提供它们。