2010-03-03 2 views
9

mock을 사용하여 색인 속성이 설정되었는지 확인하려고합니다.Moq 방법 색인 된 속성 설정

public class Index 
{ 
    IDictionary<object ,object> _backingField 
     = new Dictionary<object, object>(); 

    public virtual object this[object key] 
    { 
     get { return _backingField[key]; } 
     set { _backingField[key] = value; } 
    } 
} 

먼저, Setup()를 사용하여 시도 : 다음은 인덱스와 MOQ-수있는 개체의

[Test] 
public void MoqUsingSetup() 
{ 
    //arrange 
    var index = new Mock<Index>(); 
    index.Setup(o => o["Key"]).Verifiable(); 
    // act 
    index.Object["Key"] = "Value"; 
    //assert 
    index.Verify(); 
} 

을 ... 실패 - 그것은 그래서 get{}

에 대해 확인해야한다, 나는 시도 SetupSet() :

[Test] 
public void MoqUsingSetupSet() 
{ 
    //arrange 
    var index = new Mock<Index>(); 
    index.SetupSet(o => o["Key"]).Verifiable(); 
} 

... 예외 :

System.ArgumentException : Expression is not a property access: o => o["Key"] 
at Moq.ExpressionExtensions.ToPropertyInfo(LambdaExpression expression) 
at Moq.Mock.SetupSet(Mock mock, Expression`1 expression) 
at Moq.MockExtensions.SetupSet(Mock`1 mock, Expression`1 expression) 

이 작업을 수행하는 올바른 방법은 무엇입니까?

+0

왜이 경우 조롱을 사용 하시겠습니까? 당신이 테스트하려고하는 것은 무엇입니까? 왜 Index 클래스를 직접 테스트하지 않겠습니까? –

+0

그것은 내가 모의하고 정말로 원하는 인덱스 속성을 가진 인터페이스입니다. 질문을 단순화하기 위해 가상 속성이있는 구체적인 개체를 사용하도록 요청했습니다. –

+0

확인. 더 의미가 있습니다 :-) –

답변

8

이 당신은 단지 일반적인 속성 setter처럼 취급 할 수

[Test] 
public void MoqUsingSetup() 
{ 
    //arrange 
    var index = new Mock(); 
    index.SetupSet(o => o["Key"] = "Value").Verifiable(); 
    // act 
    index.Object["Key"] = "Value"; 
    //assert 
    index.Verify(); 
}

작동합니다.

+0

굉장, 고마워. –

+1

인덱스 속성에 대한 setter가없는 조롱 된 클래스에 음식을 제공하는 경우 더 나은 답변 (비난하지 않음)이 될 것입니다 (나와 같은 경우) – PandaWood