2011-10-26 3 views
13

Utilizzando FakeItEasy, sto cercando di catturare l'impostazione di un valore di proprietà su un oggetto falso:Utilizzando FakeItEasy, come ottenere il valore impostato su una proprietà su un falso?

Prima l'interfaccia:

interface ISomeInterface 
{ 
    int MyProperty {get;set;} 
} 

Poi un frammento di prova di unità:

var myObject = A.Fake<ISomeInterface>(); 

int saved = 0; 
A.CallTo (() => myObject.MyProperty).Invokes (x => saved = ?????); 

SomeMethod (myObject); 
Assert.That (saved, Is.EqualTo (100)); 

E avere

void SomeMethod (ISomeInterface intf) 
{ 
    intf.MyProperty = 100; 
} 

Non so cosa mettere per sostituire il ?????

risposta

13
var myObject = A.Fake<ISomeInterface>(); 

SomeMethod (myObject); 
Assert.That (saved.MyProperty, Is.EqualTo(100)); 
+0

Per quanto riguarda la seconda parte della risposta, desidero che l'oggetto falso restituisca effettivamente il valore 100 in modo che le altre classi che utilizzano questa interfaccia utilizzino tale valore. Ammetto che il mio esempio non era abbastanza chiaro. ;) –

+5

Bene, ci sono due modi, A.CallTo (() => myObject.MyProperty) .Returns (100); o solo myObject.MyProperty = 100 ;. –

+0

@Patrik Hägne, Il secondo in cui assegno direttamente la proprietà sta funzionando per me. Il primo A.CallTo (() => dbVM.CreateFolderPath) .Returns (somePath); mi ha restituito questa eccezione. Il generatore di proxy corrente non può intercettare il metodo specificato per il seguente motivo: - metodi non virtuali non possono essere intercettati. – VivekDev