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,

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

Другие вопросы по тегам