Moq It.IsAny <t>()与提取变量重构一起使用的错误?

时间:2015-11-06 15:26:54

标签: c# unit-testing lambda moq

可以在It.IsAny<T>() lambda之外初始化mock.Verify(...)参数匹配器吗?如果将It.IsAny<T>()值提取到变量(或参数)中,Moq似乎无法正常工作。

我一直在互联网上搜索,看看是否只对使用验证lambda中的It类进行了限制,但我不会将其列为任何地方列为限制。

我认为两个测试都应该通过,但第二个测试失败了:

using Microsoft.VisualStudio.TestTools.UnitTesting;
using Moq;

namespace MoqItIsAnyBug
{
    public interface ITest
    {
        void Foo(object value);
    }

    [TestClass]
    public class MoqItIsAnyBugTests
    {
        [TestMethod]
        public void GivenInlineItIsAny_WhenVerify_ThenPasses()
        {
            var testMock = new Mock<ITest>();

            testMock.Object.Foo(new object());

            testMock.Verify(f => f.Foo(It.IsAny<object>()), Times.Once);
        }

        [TestMethod]
        public void GivenExtractedItIsAny_WhenVerify_ThenFails()
        {
            var testMock = new Mock<ITest>();

            testMock.Object.Foo(new object());

            var itIsAnyObject = It.IsAny<object>();
            testMock.Verify(f => f.Foo(itIsAnyObject), Times.Once);
            // Fails with: Expected invocation on the mock once, but was 0 times: f => f.Foo(.itIsAnyObject)
        }
    }
}

我使用的是NuGet的Moq 4.2.1510.2205(2015年10月22日)和Visual Studio 2013.

有关解决方法的任何想法吗?

Here提出的问题不同,答案是&#34;为什么&#34;。

0 个答案:

没有答案