0

我想用 NSubstitue 替换 IDBCommand。我必须替换字段 CommandText,我做到了

string settedCommandText=string.Empty;

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

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

好的,但是编译器抛出错误:

CA2100 在“DriverTest.RevertCommandSendRevertInstruction()”中传递给“IDbCommand.CommandText.set(string)”的查询字符串可能包含以下变量“Arg.Do(...)”。如果这些变量中的任何一个可能来自用户输入,请考虑使用存储过程或参数化 SQL 查询,而不是使用字符串连接构建查询。

如何在不抑制此错误的情况下重写此代码。我不想用System.Diagnostics.CodeAnalysis.SuppressMessage

4

2 回答 2

0

我会写

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

或者

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

如果我想检查我期望的字符串是否已添加到命令中,并且

var _ = fakeCommand.Received(1).Commandtext

检查该值是否实际在某处使用。由于这是一个假命令,我认为这与您想知道的一样多。

于 2017-10-27T00:17:24.553 回答
0

首先,您似乎正在创建一个fakeCommand然后设置一个名为command.
其次,您Arg.Do<string>需要成为传递给方法的内容的一部分。您没有将其设置为command.

看看这里(官方文档)它是如何完成的。

于 2016-08-07T00:12:09.087 回答