2016-07-08 7 views
4

Mit FakeItEasy gibt es eine Möglichkeit, den Setter einer Nur-Schreib-Eigenschaft zu fälschen?Mit FakeItEasy gibt es eine Möglichkeit, den Setter einer Nur-Schreib-Eigenschaft zu fälschen?

Die Schnittstelle I, mit arbeiten sieht ungefähr so ​​aus:

Interface IMyInterface 
{ 
    String Foo { set; } 
} 

Ich habe versucht, die folgenden aber die Syntax funktioniert nicht.

IMyInterface _myObject = A.Fake<IMyInterface>(); 
A.CallTo(() => _myObject.Foo).Invokes((String foo) => { 
    //save off foo 
}); 

Ich habe auch versucht, aber Syntaxfehler.

IMyInterface _myObject = A.Fake<IMyInterface>(); 
A.CallTo(() => _myObject.set_Foo).Invokes((String foo) => { 
    //save off foo 
}); 

Antwort

4

Sie können es tun, aber es ist nicht sehr einfach, aufgrund einer Beschränkung des Ausdrucks Bäume (Sie eine Zuordnung in einem Ausdruck nicht schreiben kann). Die Abhilfe ist es, die „erweiterte“ Aufruf Konfigurationssyntax zu verwenden (beschrieben in the docs):

A.CallTo(_myObject) 
.Where(call => call.Method.Name == "set_Foo") 
.Invokes((String foo) => { 
    //save off foo 
}); 

aber sagen, dass eine Schreibgeschützte Eigenschaft, die wahrscheinlich nicht eine sehr gute Idee; Wenn Sie es einstellen können, sollten Sie es auch bekommen können. Wenn Sie wirklich möchten, dass es schreibgeschützt ist, sollten Sie eine Methode und keine Eigenschaft verwenden.

+0

Ich stimme Ihrer Einschätzung einer Nur-Schreib-Eigenschaft auch. In diesem Fall sollte es wirklich eine Methode sein, aber ich kann es nicht ändern. –

Verwandte Themen