2016-08-06 9 views
0

Ich möchte IDBCommand mit NSsubstitute ersetzen. I substitue Feld Command müssen, und ich habeNSubstitute für IDBCommand und Fehler CA2100

string settedCommandText=string.Empty; 

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

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

Gut, aber Compiler throw Fehler:

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.

Wie kann ich diesen Code neu schreiben, ohne diesen Fehler zu unterdrücken. Ich möchte nicht verwenden System.Diagnostics.CodeAnalysis.SuppressMessage

+0

Ich glaube nicht, dass Sie den Arg.Do brauchen. Setzen Sie die Eigenschaft 'fakeCommand.CommandText' nur nach der Testaktion auf. –

Antwort

0

Zunächst scheint es, als ob Sie eine fakeCommand erstellen und dann eine Variable namens command setzen.
Zweitens muss Ihr Arg.Do<string> Teil dessen sein, was Sie an eine Methode übergeben. Sie setzen es nicht als Wert von command.

Schauen Sie sich here (official documentation) für wie es gemacht wird.

0

Ich würde

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

oder

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

schreiben, wenn ich, dass die Zeichenfolge Ich erwarte, dass mit dem Befehl wird prüfen will, und

var _ = fakeCommand.Received(1).Commandtext 

zu prüfen, ob die Wert wurde tatsächlich irgendwo benutzt. Da dies ein falscher Befehl ist, würde ich denken, dass es ungefähr so ​​viel ist, wie du es jemals wissen wolltest.

Verwandte Themen