как проверить параметр из Oracle в С#

Я написал функцию, которая извлекает некоторые данные из базы данных (используя хранимую процедуру, базу данных Oracle).

Хранимая процедура имеет 4 параметра, и один из них является параметром am out. Вот мой код для этого:

string commandName = "someStoredProc";
List<IDataParameter> parameters = new List<IDataParameter>() { new SqlParameter("@param1", param1), new SqlParameter("@param2", param2), new SqlParameter("@param3", param3) };

SqlParameter calcId = new SqlParameter("@param4", SqlDbType.BigInt);
calcId.Direction = ParameterDirection.Output;

parameters.Add(calcId);

Dictionary<long, ITrade> trades = _genericDataReader.ExecuteSqlQuery(parameters, CommandTypeEnum.Command, commandName);

long CalculationID =  (long)calcId.Value;

Этот код работает нормально.

Теперь я пишу модульные тестовые примеры для этого. Я могу смоделировать результат базы данных, что захочу, но не этот четвертый параметр:

тест не удался, когда он попытался преобразовать calcId.Value в long, если он равен нулю.

Как я могу издеваться над этим значением параметра out?


person Abhash786    schedule 03.07.2014    source источник


Ответы (1)


Что действительно необходимо здесь, так это написать реализацию ExecuteSqlQuery для целей тестирования, которая имеет доступ к аргументам и может выполнять работу.
Rhino Mock предоставляет несколько способов добавления пользовательского поведения к макетам/заглушкам. Один из возможных способов — написать The Do() обработчик.

Вот краткий пример:

_genericDataReader
    .Stub(gdr => gdr.ExecuteSqlQuery(Arg<List<IDataParameter>>.Is.Anything, Arg<CommandTypeEnum>.Is.Anything, Arg<string>.Is.Anything))
    .Do((Func<List<IDataParameter>, CommandTypeEnum, string, IDictionary<long, ITrade>>)((param, cmd, cmdName) =>
    {
        param[3].Value = 12L;
        return null; // or return whatever is required dataset here
    }));
person Alexander Stepaniuk    schedule 05.07.2014