NSubstitue для IDBCommand и ошибка CA2100

Я хочу заменить IDBCommand на использование NSubstitue. Я должен подставить поле CommandText, что я и сделал

string settedCommandText=string.Empty;

IDbCommand fakeCommand = Substitute.For<IDbCommand>();

command.CommandText =Arg.Do<string>(x => settedCommandText = x);

Хорошо, но компилятор выдает ошибку:

CA2100 Строка запроса, переданная в «IDbCommand.CommandText.set(string)» в «DriverTest.RevertCommandSendRevertInstruction()», может содержать следующие переменные «Arg.Do(...)». Если какая-либо из этих переменных может быть получена из пользовательского ввода, рассмотрите возможность использования хранимой процедуры или параметризованного SQL-запроса вместо построения запроса с помощью конкатенации строк.

Как я могу переписать этот код, не подавляя эту ошибку. Я не хочу использовать System.Diagnostics.CodeAnalysis.SuppressMessage


person Alex    schedule 06.08.2016    source источник
comment
Не думаю, что вам понадобится Arg.Do. Просто подтвердите свойство fakeCommand.CommandText после тестового действия.   -  person David Tchepak    schedule 07.08.2016


Ответы (2)


Во-первых, кажется, что вы создаете fakeCommand, а затем устанавливаете переменную с именем command.
Во-вторых, ваше Arg.Do<string> должно быть частью того, что вы передаете методу. Вы не устанавливаете его как значение command.

Посмотрите здесь (официальная документация), чтобы узнать, как это делается.

person Noctis    schedule 07.08.2016

я бы написал

fakeCommand.Received(1).CommandText = Arg.Any<string>();

or

fakeCommand.Received(1).CommandText = "some specific string";

если бы я хотел проверить, что строка, которую я ожидаю, добавлена ​​​​в команду, и

var _ = fakeCommand.Received(1).Commandtext

чтобы убедиться, что значение действительно где-то использовалось. Поскольку это поддельная команда, я думаю, что это все, что вы когда-либо хотели знать.

person Skip Saillors    schedule 27.10.2017