2016-12-08 2 views
0

다음 방법을 테스트하기 위해 Rhino Mock을 사용하고 있습니다.IDataReader의 GetName에 값을 설정하는 방법은 무엇입니까?

public static List<string> RetrieveColumnNames(IDataReader reader) 
    { 
     List<string> columns = null; 

     for (int i = 0; i < reader.FieldCount; i++) 
     { 
      columns.Add(reader.GetName(i)); 
     } 

     return columns; 
    } 

이런 식으로 뭔가를하지만 계속하는 방법을 알고하지 않습니다

[TestMethod()] 
    public void RetrieveColumnNamesTest() 
    { 
     //Arrange 
     IDataReader reader = MockRepository.GenerateStub<IDataReader>(); 

     reader.Stub(x => x.FieldCount).Return(2); 
     reader.Stub(x => x.name...) // not gonna happen 

     //Act 
     using (reader) 
     { 
      List<string> list = RetrieveColumnNames(reader); 

      //Assert 
      Assert.AreEqual(2, list.Count); 
     } 

    } 

하지만 어떻게 시험 방법 GetName의 값을 정렬 할 수 있습니다?

답변

0

당신은 사용 단순히 Repeat을 사용해야합니다
을 경우 같은 값을 반환 할 :

reader.Stub(x => x.GetName(0)).IgnoreArguments().Repeat.Once().Return("First Name"); 
reader.Stub(x => x.GetName(0)).IgnoreArguments().Repeat.Once().Return("Second Name"); 
+0

답장을 보내 주셔서 감사합니다. 코드를 업데이트했지만 nullreferenceexception을 만났습니다. 업데이트 된 코드를 참조하십시오. 여전히 문제에 대해 매우 혼란 스럽습니다 ... 감사합니다 – user1888955

+0

예외는 Rhino Mock과 관련이 없습니다. 다음과 같이 열 변수를 초기화해야합니다. List columns = new List (); 덕분에 –

+0

. 나는 그 사실을 알지 못해서 정말 바보입니다. – user1888955

1

올바른에게 :

이 경우
reader.Stub(x => x.GetName(0)).IgnoreArguments().Repeat.Any().Return("My Name"); 

서로 다른 값을 반환 할 UT를 작성하는 방법은 다음과 같습니다.

[TestMethod] 
public void TestMethod1() 
{ 
    const string FIRST = "First Name"; 
    const string SECOND = "Second Name"; 

    var reader = MockRepository.GenerateStub<IDataReader>(); 

    reader.Stub(x => x.FieldCount).Return(2); 
    reader.Stub(x => x.GetName(0)).Return(FIRST); 
    reader.Stub(x => x.GetName(1)).Return(SECOND); 

    var actual = RetrieveColumnNames(reader); 

    CollectionAssert.AreEquivalent(new [] {FIRST, SECOND}, actual); 

} 

이 경우 IgnoreArguments().Repeat.Once()을 사용하는 것은 나쁜 습관입니다. 기본적으로 호출 순서에 문제가 생길 수 있고 (덜 읽기 쉽기 때문에) Do 메서드를 List<string>과 함께 사용하는 것이 좋습니다.

CollectionAssert은 반환 값을 확인하는 최상의 기능을 제공합니다.

BTW; 새 인스턴스에 columns을 초기화하지 않았습니다.

관련 문제