Подтвердить что ты не робот

RhinoMocks - выбор параметров вызываемых функций

Использование RhinoMocks - могу ли я получить параметры вызываемой функции? Я имею в виду; могу ли я получить некоторые из неизвестных параметров из вызова функции?

У меня есть макет, и я ожидаю, что на нем будет вызвана какая-то функция. Я знаю один из параметров, но другой неизвестен, поскольку это происходит из класса, который использует макет и вызывает функцию на нем. Более конкретно - в этом случае - неизвестный аргумент - лямбда-функция. Это функция обратного вызова, которая должна быть вызвана при завершении функции. Поскольку макет предотвращает вызов обратного вызова, я хочу его получить и называть сам.

Итак, Я хочу проверить, вызвана ли функция. Я хочу убедиться, что некоторые из аргументов были ожидаемыми. И я хочу выйти из неизвестных аргументов, чтобы потом выполнить некоторые операции над ними.

Предполагая, что оба аргумента являются ints (для простоты), я хотел бы сделать что-то вроде этого:

int unknownInt; 
_fakeSomething.AssertWasCalled(factory => factory.Foo(1, out unknownInt));
// then play around with unknownInt.. 

Можно ли это сделать? Я вижу, что есть Arg.Out, но не мог заставить его работать.

Примечание: Обновлен вопрос, поскольку он, кажется, вводит в заблуждение.

4b9b3361

Ответ 1

Arg<string>.Matches(arg => you got the argument here...);

UPDATE:

Чтобы получить второй аргумент, сделанный при первом вызове метода Foo на _fakeSomething:

string someArg = null;
var args = _fakeSomething.GetArgumentsForCallsMadeOn(
    x => x.Foo(0, 0), 
    x => x.IgnoreArguments()
);
var int = (int)args[0][1];

Ответ 2

Не уверен, что это можно сделать, но такое тестирование может привести к ненадежным тестам, поскольку вы не знаете фактический параметр, который был передан.

Если возможно, проверьте на явные данные. Если вы f.eks передаете значение null вместо реального значения, ваш тест, скорее всего, пройдет по неправильной причине.

Тестирование с помощью Arg.Is. Все должно быть сделано тщательно и когда вам действительно не нужен параметр, например, в AssertWasNotCalled.