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
2 ответа
Я бы написал
fakeCommand.Received(1).CommandText = Arg.Any<string>();
или же
fakeCommand.Received(1).CommandText = "some specific string";
если я хочу проверить, что ожидаемая строка добавляется в команду, и
var _ = fakeCommand.Received(1).Commandtext
чтобы проверить, что значение действительно где-то использовалось. Поскольку это фальшивая команда, я думаю, это примерно столько, сколько вы захотите узнать.
Во-первых, кажется, что вы создаете fakeCommand
а затем установить переменную с именем command
,
Во-вторых, ваш Arg.Do<string>
должен быть частью того, что вы передаете в метод. Вы не устанавливаете это как значение command
,
Посмотрите здесь (официальная документация), как это делается.