Начиная с Moq 4.9.0, вы можете получить доступ к списку вызовов смоделированного объекта и выполнить утверждения для них без необходимости обратного вызова:
[Test]
public void TestMoq()
{
var someClass = new Mock<ISomeClass>();
someClass.Object.SomeMethod(42, null);
someClass.Object.SomeMethod(88, "Hello");
// First invocation
Assert.AreEqual(42, (int) someClass.Invocations[0].Arguments[0]);
Assert.IsNull(someClass.Invocations[0].Arguments[1]);
// Second invocation
Assert.AreEqual(88, (int) someClass.Invocations[1].Arguments[0]);
Assert.AreEqual("Hello", someClass.Invocations[1].Arguments[1]);
}
Конечно, это только пример, в коде реального мира вы должны быть более осторожны с этим методом, главным образом потому, что все аргументы доступны как object
s, а не как типизированные аргументы, как в Callback
. Кроме того, вызовы не привязаны к Setup
, это список всех вызовов для ложного класса.