N IDBCommand的订阅和错误CA2100



我想用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

以检查该值是否在某个地方实际使用。由于这是一个虚假的命令,我认为这是你想知道的最多的。

最新更新