2016-08-06 28 views
0

我想替换使用NSubstitue的IDBCommand。 我必须substitue领域的CommandText,我也IDBCommand和错误的NSubstitue CA2100

string settedCommandText=string.Empty; 

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

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

所有权利,但编译器抛出错误:

CA2100 The query string passed to 'IDbCommand.CommandText.set(string)' in 'DriverTest.RevertCommandSendRevertInstruction()' could contain the following variables 'Arg.Do(...)'. If any of these variables could come from user input, consider using a stored procedure or a parameterized SQL query instead of building the query with string concatenations.

我怎么可以重写这段代码,但不影响此错误。我不想使用System.Diagnostics.CodeAnalysis.SuppressMessage

+0

我不认为你需要Arg.Do.在测试操作之后,只需在'fakeCommand.CommandText'属性上声明。 –

回答

0

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

看看here (official documentation)是如何完成的。

0

我会写

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

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

如果我想检查我期望字符串添加到命令,并

var _ = fakeCommand.Received(1).Commandtext 

,以检查价值实际上用在某个地方。既然这是一个虚假的命令,我会认为这和你想知道的一样多。