Moq эквивалентно GetArgumentsForCallsMadeOn Rhino Mock - PullRequest
4 голосов
/ 06 мая 2011

пытается проверить и аргументировать и нужно его получить.что эквивалентно в Moq?или способ сделать это в Moq?

Ответы [ 2 ]

7 голосов
/ 07 мая 2011

понял это, используя функцию обратного вызова в Mock Setup

int captured_int;

mocked_obj.Setup(x => x.SomeMethod(It.IsAny<int>()))
    .Callback<int>(x => captured_int = x);

, если ваш метод имеет несколько параметров

int captured_int;
object captured_object;

mocked_obj.Setup(x => x.SomeMethod(It.IsAny<int>(), It.IsAny<object>()))
    .Callback<int, object>((i, o) => {
                                         captured_int = i;
                                         captured_object = o;
                                     });

, тогда вы можете делать утверждения на захваченных значениях;

0 голосов
/ 19 мая 2019

Начиная с 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, это список всех вызовов для ложного класса.

...