Как вы заглушите метод, который принимает IEnumerable в RhinoMocks? - PullRequest
1 голос
/ 20 февраля 2020

У меня есть класс SqlLayer, который я пытаюсь смоделировать, у которого есть метод GetDataReader, который принимает строковый запрос и IEnumerable из SqlParameters. Я попытался заглушить вызов метода следующим образом:

var parameters = new SqlParameter[] {}
mockSqlLayer.Stub(x => x.GetDataReader(spaceConsumedQuery, parameters)).Return(MockDataReader());

Но тест возвращает NullReferenceException, я полагаю, потому что подпись не разрешается правильно, и не может найти заглушку. Подпись метода, которую я пытаюсь вызвать, выглядит следующим образом:

public IDataReader GetDataReader(string commandText, IEnumerable<SqlParameter> parameters)

1 Ответ

1 голос
/ 20 февраля 2020

Требуется ослабить сопоставление аргументов, чтобы вызов работал так, как ожидалось.

mockSqlLayer
    .Stub(_ => _.GetDataReader(spaceConsumedQuery, Arg<IEnumerable<SqlParameter>>.Is.Anything))
    .Return(MockDataReader());

В исходном коде необходимо было использовать ту же ссылку на объект для сопоставления вызова.

Здесь предполагается, что значение в переменной spaceConsumedQuery является тем же самым, которое используется при упражнении испытуемого субъекта.

Если нет, тогда Arg<string>.Is.Anything может также использоваться для ослабления этого соответствия .

...