我想用IDubommand代替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
答案 0 :(得分:0)
首先,您似乎正在创建fakeCommand
,然后设置名为command
的变量。
其次,您的Arg.Do<string>
需要成为您传递给方法的一部分。您没有将其设置为command
的值。
看看here (official documentation)是如何完成的。
答案 1 :(得分:0)
我会写
fakeCommand.Received(1).CommandText = Arg.Any<string>();
或
fakeCommand.Received(1).CommandText = "some specific string";
如果我想检查我期望的字符串是否已添加到命令中,并且
var _ = fakeCommand.Received(1).Commandtext
检查该值是否实际用于某处。由于这是一个假命令,我认为这与你想知道的一样多。