Einstellung mock-Eigenschaft über das Setup Ursachen 'Ausdruck ist nicht eine Methode invocation'
Habe ich den code unten, wo meine Mock-Schnittstelle verfügt über eine Recorder-Eigenschaft, die ist Klasse.
Ich dann versuchen, eine Eigenschaft auf, die Klasse aber ich bekomme Expression is not a method invocation
Fehler. Können Sie helfen?
Wird der Fehler zur Laufzeit, wenn es geht, zu versuchen, eine Gruppe die enum-Eigenschaft. Es löst eine ArgumentException mit der unten stack trace:
at Moq.ExpressionExtensions.ToMethodCall(LambdaExpression expression)
at Moq.Mock.<>c__DisplayClass1c`2.<Setup>b__1b()
at Moq.PexProtector.Invoke[T](Func`1 function)
at Moq.Mock.Setup[T,TResult](Mock mock, Expression`1 expression, Func`1 condition)
at Moq.Mock`1.Setup[TResult](Expression`1 expression)
Dank
//Works
var mock = new Moq.Mock<IEngine>();
//Works
mock.Setup(x => x.Recorder).Returns(new Moq.Mock<Recorder>().Object);
//Fails on the next line assigning a property value!!!
mock.Setup(x => x.Recorder.RunState).Returns(Recorder.eRunStates.Play);
UPDATE - ich habe festgestellt, dass RunState ist nicht eine Eigenschaft, sondern eine Feld/Element ist ein enum
- Können Sie uns sagen, wo du den Fehler? Ist es eine compile-Zeit-Fehler oder ein execution time error, und wenn es eine Hinrichtung ein Fehler, Wann ist es geschehen?
- fertig!
- So der Aufruf fehlschlägt - die erste oder die zweite? (Wenn es das erste ist, entfernen Sie jetzt das zweite Bild ganz...)
- Geändert Frage
Du musst angemeldet sein, um einen Kommentar abzugeben.
Habe ich festgestellt, dass die Schaffung eines mock-Recorder und dann Werte zuweisen, die mock-Objekt scheint, das Problem zu beheben. Nicht sicher, ob das ist der richtige Weg, Dinge zu tun, obwohl.
Ich denke, Sie sollten zurückkehren, die verspotten, die Sie erstellt haben, im ersten Teil zum zweiten Teil:
Das ist nur eine Vermutung, ohne Verwendung Moq mich - aber es macht Sinn.
Jedoch, dieses sieht wie es geht, um am Ende als ziemlich zerbrechlich. Möchten Sie vielleicht erwägen, ein fake anstatt hier - zumindest für eine der Objekte, wenn nicht beide.
EDIT: Blick auf die Dokumentation, wäre eine alternative:
Wenn Sie SetupGet auf die verhöhnt, anstatt setup, funktioniert dies
Müssen Sie das setup auf Ihrem Mock-Objekt zum konfigurieren des RunState-Eigenschaft statt.
EDIT: FYI, Sie alles tun müssen, das setup auf die mock, bevor Sie auf die .Object-Eigenschaft, wie das Objekt erstellt wird, an dieser Stelle und weitere setups kann nicht passieren.
Auch ein paar Vorschläge, es sieht aus wie Ihre enum-Element für Ausführung Staaten ist eingebettet in Ihre recorder-Klasse, ich würde es verschieben, in einer eigenen Klasse & zusätzlich fallen die " e " - Präfix.