用于IDBCommand的NSubstitue和错误CA2100

时间:2016-08-06 22:50:15

标签: c# nsubstitute idbcommand

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

2 个答案:

答案 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

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