2013-09-29 1 views
2

내 단위 테스트에서 코뿔소 모형을 사용하고 있는데 나는 다음과 같은 코드를 사용하여 모형을 만들려고 해요 :Rhino Mock에서 ReadOnlyCollection <T>을 조롱하는 방법?

Can not instantiate proxy of class: 
System.Collections.ObjectModel.ReadOnlyCollection` 
1[[SolutionName.FolderName,]]. 
Could not find a parameterless constructor. 
:

var userDetails = MockRepository.GenerateMock<ReadOnlyCollection<UserDetails>>(); 

을하지만, 나는 다음과 같은 오류를 얻을 단위 테스트를 실행할 때

그물을 검색해도 비슷한 질문과 해결책을 찾았습니다. 하나는 moq에 대해 SetupGet() 메소드를 사용했지만 rhino mocks에 해당하는 것이 무엇인지 모르겠습니다. (UserDetails 클래스에는 매개 변수없는 생성자가 있습니다.) ReadOnlyCollection에 대한 스텁/모의를 어떻게 만들 수 있습니까?

+3

왜 조롱해야하나요? 인스턴스를 만들고 필요에 따라 설정한다고 생각합니다. 모의로이기는 데별로 보지 마라. –

답변

2

당신은 GenerateMock 모든 생성자 인수를 전달할 수 있습니다 :

var inner = new List<UserDetails>(); 
var userDetails = MockRepository.GenerateMock<ReadOnlyCollection<UserDetails>>(inner); 

당신은 당신의 시험에 ReadOnlyCollection의 인스턴스를 생성하고 조롱보다 훨씬 간단 할 몇 가지 다른 메서드 호출에서 반환하는 것이 좋습니다 적절한 방법.

+0

+1 아 물론, 간단합니다. –

+0

원래 오류가 발생했지만 지금은 아무 것도 시도하지 않고 무언가를 수행 할 때 '유효하지 않은 호출, 마지막 호출이 사용되었거나 호출이 생성되지 않았습니다. (가상 (C#)/오버라이드 (VB) 방법). 코뿔소 모의가 사용할 수 있도록 내가 가상이라고 부르는 방법을 만들어야합니까? 어느 쪽이 방금 정적 클래스이므로 실현할 수 없어요. – Theomax

+0

@Theomax - 코드를 보지 않고 말하기는 어렵지만'ReadOnlyCollection'을 보면 대부분의 메소드가 가상이 아니기 때문에 모의을 할 수 없습니다 그들은 코뿔소 조롱을 사용합니다. .Net 4.5를 사용하고 있다면 대신 'IReadonlyCollection'을 사용할 수 있습니다. 그러나 프레임 워크 클래스를 모방하는 대신 테스트에 필요한 테스트 데이터를 생성 할 것입니다. – Lee

1

Rhino Mock으로이 작업을 수행 할 수 있는지 확실하지 않습니다. 문제는 ReadOnlyCollection이 인터페이스가 아니며 오픈 소스 조롱 프레임 워크가 작동 할 수있는 가상 메서드도 포함되어 있지 않다는 것입니다. 당신은 여전히 ​​것을 얻을 수 있도록

ReadOnlyCollection부터 구현은 IList 당신은 기본적으로 공용 속성 같은 IList의 모음을 사용 SO

How to mock a private readonly IList<T> property using moq

질문이 발견 제안 된 방법을 시도하지만 기본 목록을 비공개로 할 수 읽기 전용 경험. 따라서 귀하의 테스트에서, 당신은 사용할 수 있습니다 : 당신이 정말이 ReadOnlyCollection을 조롱 할

var userDetails = MockRepository.GenerateMock<IList<UserDetails>>();

경우, 당신은 TypeMock 또는 JustMock 중 하나를 구매해야합니다. 또는 MS Fakes 조롱 프레임 워크를 사용할 수있는 Visual Studio 2012 Premium with Update 2를 구하십시오.

편집 : Lee의 답변은 훨씬 효율적입니다. 그 대신 제안 해 드리겠습니다.

관련 문제