2016-08-06 9 views
0

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

string settedCommandText=string.Empty; 

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

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

Хорошо, но ошибка компилятора бросок:

CA2100 The query string passed to 'IDbCommand.CommandText.set(string)' in 'DriverTest.RevertCommandSendRevertInstruction()' could contain the following variables 'Arg.Do(...)'. If any of these variables could come from user input, consider using a stored procedure or a parameterized SQL query instead of building the query with string concatenations.

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

+0

Я не думаю, что вам понадобится Arg.Do. Просто подтвердите свойство 'fakeCommand.CommandText' после тестового действия. –

ответ

0

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

Посмотрите here (official documentation), как это делается.

0

Я хотел бы написать

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

или

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

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

var _ = fakeCommand.Received(1).Commandtext 

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