我有一个测试,其中有一组参数,并且我想验证是否已调用该方法,并且每个参数仅指定了一次。我可以这样做:
var paramList = new List<string> { "one", "two", "three", "four" };
paramList.ForEach(x => MyMock.Verify(y => y.DoSomething(x), Times.Once));
但是我想知道Moq是否可以通过一次验证电话提供我可以做的事情。
答案 0 :(得分:1)
如果我没有记错的话,我认为Verifiable
不会提供。问题在于,即使您已正确设置Verify
来使用VerifyAll
,或者如果您想使用Times
,也无法指定paramList.ForEach(s => mock.Setup(m => m.DoSomething(s)).Verifiable());
mock.Object.DoSomething("one");
mock.Object.DoSomething("two");
mock.Object.DoSomething("three");
mock.Object.DoSomething("four");
mock.Verify(); //Cannot specify Times
限制。
验证
paramList.ForEach(s => mock.Setup(m => m.DoSomething(s)));
mock.Object.DoSomething("one");
mock.Object.DoSomething("two");
mock.Object.DoSomething("three");
mock.Object.DoSomething("four");
mock.VerifyAll(); //Cannot specify Times
VerifyAll
Verify
尽管,您的方法没有任何问题,我只想再添加一个选项。您可以使用Capture.In
功能来避免//Arrange
var invocation = new List<string>();
mock.Setup(m => m.DoSomething(Capture.In(invocation)));
//Act
mock.Object.DoSomething("one");
mock.Object.DoSomething("two");
mock.Object.DoSomething("three");
mock.Object.DoSomething("four");
//Assert
CollectionAssert.AreEquivalent(paramList, invocation);
,如下所示:
{{1}}