2011-10-03 13 views
7

Z NSubstitute, czy istnieje sposób przechwycenia wartości przekazanej do ustawiacza nieruchomości?NSubstitute przechwytywanie "setter" tylko wywołanie właściwości

E.g. jeśli mam następujący interfejs:

public interface IStudent { 
    int Id { set; } 
    string Name { set; } 
} 

Mówią mam zastępczą utworzony np

var _studentSub = Substitute.For<IStudent>(); 

Czy jest jakiś sposób mogę przechwycić i uchwycić wartość, jeśli którekolwiek z „set” metod substytut są wywoływane?

Odpowiedz

13

Standardowe podejście do NSubstitute to posiadanie właściwości z obiektami pobierającymi i ustawiającymi, ponieważ wtedy właściwości na substytutach będą działać zgodnie z oczekiwaniami (tzn. Otrzymasz z powrotem to, co ustawione).

Jeśli interfejs musi mieć właściwości setter tylko można uchwycić wartość indywidualnej własności używając Arg.Do:

[Test] 
public void Setter() { 
    var sub = Substitute.For<IStudent>(); 
    var name = ""; 
    sub.Name = Arg.Do<string>(x => name = x); 

    sub.Name = "Jane"; 

    Assert.AreEqual("Jane", name); 
} 
+0

Na działce z pobierania/ustawiania można użyć sub.Name = Arg.Do (x => nazwa = x); przechwycić wartość i nadal używać sub.Name.Returns ("MySampleName"); do zwracania wartości? "Zwroty" nie wydają się działać dla nas! – bstack

+1

Właśnie sprawdziłem, wydaje się, że to błąd mieszający Arg.Do i Returns dla tej samej właściwości get/set. Działa, jeśli zmienisz Arg.Do na When..Do. na przykład "sub.When (x => x.Name = Arg.Any ()). Do (x => name = x.Arg ());" –

+1

Zobacz [raport o błędach] (https://github.com/nsubstitute/NSubstitute/issues/59) do pracy Kiedy ..... na przykład. –

Powiązane problemy