验证带有参数列表的方法,每个方法一次?

时间:2019-03-14 13:18:48

标签: c# moq

我有一个测试,其中有一组参数,并且我想验证是否已调用该方法,并且每个参数仅指定了一次。我可以这样做:

var paramList = new List<string> { "one", "two", "three", "four" };
paramList.ForEach(x => MyMock.Verify(y => y.DoSomething(x), Times.Once));

但是我想知道Moq是否可以通过一次验证电话提供我可以做的事情。

1 个答案:

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