Moq + Unit Testing - System.Reflection.TargetParameterCountException: Parameteranzahl stimmt nicht überein
Ich bin tring verwenden Sie einen lambda-Ausdruck mit einem multiple-params-Funktion, sondern Moq wirft diese exception zur Laufzeit, wenn ich versuche zu rufen, die mock.Object.Convert(value, null, null, null);
Linie.
System.Reflexion.TargetParameterCountException: Parameter count mismatch
Der code ist:
var mock = new Mock<IValueConverter>();
mock.Setup(conv => conv.Convert(It.IsAny<Object>(), It.IsAny<Type>(),
It.IsAny<Object>(), It.IsAny<CultureInfo>())).Returns((Int32 num) => num + 5);
var value = 5;
var expected = 10;
var actual = mock.Object.Convert(value, null, null, null);
Was ist der richtige Weg, um es zu implementieren?
InformationsquelleAutor der Frage m-y | 2011-10-10
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es ist Ihre
Returns
- Klausel. Sie haben eine 4-parameter-Methode, die du aufbaust, aber du bist nur eine 1-parameter lambda. Ich lief die folgende ohne Probleme:Keine Ausnahmen, test bestanden.
InformationsquelleAutor der Antwort Erik Dietrich
Nicht eine Antwort für den OP, aber vielleicht für zukünftige Googler:
Hatte ich eine
Callback
das hat nicht mit der Signatur der Methode setupDies war das Ergebnis von einigen refactoring und refactoring-tool natürlich konnte nicht erkennen, dass die
Callback
Signatur war falschInformationsquelleAutor der Antwort fiat
Vielleicht ist es, weil Sie auf der Durchreise sind
null
aberIt.IsAny<Object>()
ist zu erwarten, dass jedeobject
außernull
? Was passiert, wenn Sie Folgendes tun?:Dies ist nur ein stab in the dark von mir, ich bin mehr vertraut mit Rhino.Mocks.
Meine 2. Vermutung:
Angeschaut auf der Moq.chm, das mit dem download,
Sind Sie mit der
Setup(Expression<Action<T>>)
Methode "Gibt an, dass ein setup auf die verspottet Typ für einen Anruf zu einervoid
- Methode".Du willst te
Setup<TResult>(Expression<Func<T,TResult>>)
Methode "Gibt an, dass ein setup auf die verspottet Typ für einen Anruf auf einen Wert zurückgeben Methode".Könnte man also versuchen:
InformationsquelleAutor der Antwort Grokodile
In meinem Fall, dachte ich, dass der Typ in
Returns<>
ist der Ausgabe-Typ, aber es war in der Tat die Art des Eingangs(s).Also, wenn Sie haben eine Methode
Die richtige Klausel ist
.Returns<int, int>(...)
NICHT.Returns<string>(...)
was ich auch am Anfang gedacht.Mein Fehler war, weil ich das testen einer Funktion mit dem gleichen input-und return-Typ anfangs - zum Beispiel
public virtual string Foo(string a)
.InformationsquelleAutor der Antwort sashoalm