我想用NSubstitue替换IDBCommand。我必须替换字段CommandText,我做了
string settedCommandText=string.Empty;
IDbCommand fakeCommand = Substitute.For<IDbCommand>();
command.CommandText =Arg.Do<string>(x => settedCommandText = x);
好吧,但是编译器抛出错误:
CA2100传递给"IDbCommand.CommandText.set(string("的查询字符串"DriverTest.RivertCommandSendRevertInstruction(("中可能包含以下变量"Arg.Do(…("。如果这些变量中的任何一个可能来自用户输入,请考虑使用存储过程或参数化SQL查询,而不是使用字符串串联来构建查询。
如何在不抑制此错误的情况下重写此代码。我不想使用System.Diagnostics.CodeAnalysis.SuppressMessage
首先,您似乎正在创建一个fakeCommand
,然后设置一个名为command
的变量
其次,您的Arg.Do<string>
需要成为传递给方法的内容的一部分。您没有将其设置为command
的值。
看看这里(官方文件(是如何做到的。
我会写
fakeCommand.Received(1).CommandText = Arg.Any<string>();
或
fakeCommand.Received(1).CommandText = "some specific string";
如果我想检查我期望的字符串是否添加到命令中,以及
var _ = fakeCommand.Received(1).Commandtext
以检查该值是否在某个地方实际使用。由于这是一个虚假的命令,我认为这是你想知道的最多的。