2008-11-27 3 views
5

System.Data.IDataReader에서 GetValues ​​() 메서드를 조롱하려면 어떻게해야합니까?System.Data.IDataReader에서 GetValues ​​() 메서드를 조롱하려면 어떻게해야합니까?

이 메서드는 전달 된 개체의 배열을 변경하므로 단순히 조롱 된 값을 반환 할 수 없습니다.

private void UpdateItemPropertyValuesFromReader(object item, IDataReader reader) 
{ 
    object[] fields = new object[ reader.FieldCount ]; 
    reader.GetValues(fields); //this needs to be mocked to return a fixed set of fields 


    // process fields 
    ... 
} 

답변

9

대리인을 사용하는 Expect.Do() 메서드를 사용해야합니다. 이 델리게이트는 호출하는 코드 대신 뭔가를해야한다. 따라서 fields 변수를 채우는 대리자를 작성하십시오.

private int SetupFields(object[] fields) 
{ 
    fields[ 0 ] = 100; 
    fields[ 1 ] = "Hello"; 
    return 2; 
} 

[Test] 
public void TestGetValues() 
{ 
    MockRepository mocks = new MockRepository(); 

    using (mocks.Record()) 
    { 
     Expect 
      .Call(reader.GetValues(null)) 
      .IgnoreArguments() 
      .Do(new Func<object[], int>(SetupField)) 
    }  

    // verify here 
} 
+1

나는 당신의 작은 오타가 있음을 알지만, 이것이 내가 필요한 것이라고 생각한다! 감사합니다 – D3vtr0n

+0

기업 방화벽 정책으로 인해 <문자를 게시 할 수 없습니다 .. –

+0

@Ben Ahh 방화벽을 사랑해야합니다. –

관련 문제