2

使用 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 就很长了。我可以让它更简单吗?

4

2 回答 2

5

只是不要进行设置,使用默认的 MockBehavior.Loose 它将返回默认值 - 类为 null,数字为 0,结构的默认值。

警告:如果返回类型是 IEnumerable 或 Array,它将返回空集,而不是 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();
    }
于 2013-05-29T13:15:59.130 回答
1

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

于 2013-05-29T09:30:04.403 回答