可以在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;。