2011-10-03 2 views
7

NSubstitute를 사용하면 속성 설정자에게 전달한 값을 캡처 할 수있는 방법이 있습니까?NSubstitute "setter"속성 호출 만 가로 채기

예. 나는 다음과 같은 인터페이스가있는 경우 : 내가 가로의이 방법을 "설정"의 경우는 값을 캡처 할 수있는 방법이 있나요

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

:

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

을 내가 대신 만들어 예를 들어이 있다고 대체가 호출됩니까?

답변

13

NSubstitute에 대한 표준 접근 방식은 getter 및 setters로 속성을 갖는 것입니다. 대용 물 속성이 예상대로 작동하므로 (즉, 설정 한 내용이 다시 표시됨)

사용자 인터페이스는 세터 전용 속성을 가지고있는 경우는 Arg.Do를 사용하여 개별 속성 값을 캡처 할 수 있습니다 : GET/SET와 속성에 대해

[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

, 당신이 사용할 수 sub.Name = Arg.Do (x => name = x); 값을 캡처하고 여전히 sub.Name.Returns ("MySampleName"); 반환 값은? '반품'은 우리에게 효과가없는 것 같습니다! – bstack

+1

그냥 확인, Arg.Do 및 반환 같은 get/set 속성에 대한 혼합 버그 것 같습니다. Arg.Do를 When..Do로 전환하면 작동합니다. 예 : "(x => x.Name = Arg.Any ()). (x => name = x.Arg ()); –

+1

작업을 위해 [버그 리포트] (https://github.com/nsubstitute/NSubstitute/issues/59)를 참조하십시오. When..Do example. –