2009-07-06 1 views
3

VB.NET에서 RhinoMock을 사용하고 있으며 읽기 전용 목록의 반환 값을 설정해야합니다.VB.NET에서 RhinoMock을 사용하여 읽기 전용 속성의 반환 값을 설정하는 방법은 무엇입니까?

는 여기에 내가이 원하는 거야 (하지만 작동하지 않습니다) : 게시물 읽기 전용 속성입니다 때문에

dim s = Rhino.Mocks.MockRepository.GenerateStub(of IUserDto)() 
s.Id = guid.NewGuid 
s.Name = "Stubbed name" 
s.Posts = new List(of IPost) 

그것은 컴파일에 실패합니다.

그런 다음 람다 식을 사용해 보았습니다.이 식은 Function 호출에서는 잘 작동하지만 Properties에서는 그렇지 않습니다. 이것은 컴파일에 실패합니다.

s.Stub(Function(x As IUserDto) x.Posts).Return(New List(Of IPost)) 

다음 (실패) 시도는 SetupResults을 사용했지만,이는 재생 모드에서 사용할 수 없다는 실패했습니다. 내 질문에 날 다시 가져

Rhino.Mocks.SetupResult.For(s.Posts).Return(New List(Of IPost)) 

:

어떻게해야합니까 설정 VB.NET에 RhinoMocks를 사용하여 읽기 전용 속성에 대한 반환 값?

+0

정확히 Rhino.Mocks.SetupResult.For (s.Posts) .Return (새 목록 (Of IPost))이 실패한 이유는 무엇입니까? – Grzenio

+0

재생 모드에서 올바르지 않다고 말하면서 실패했습니다. – Rick

+0

더 많은 코드를 제공해 주시겠습니까? 새로운 AAA 구문을 기존의 Record-Playback 방법론과 혼합하여 사용하지 못할 수도 있습니다. VB.NET에 익숙하지 않지만 readonly 속성 (즉 setter가없는 속성)을 스텁하는 것은 C#에서 매우 쉽게 수행 할 수 있습니다. – jpoh

답변

1

IUserDto 인터페이스입니까? 그렇다면 그냥 작동해야합니다. 그렇지 않다면 문제는 해당 읽기 전용 속성이 무시할 수 없다는 것입니다. RhinoMocks는 인터페이스에 정의되어 있거나 재정의 할 수있는 속성/메소드 만 조롱 할 수 있습니다. 여기

람다 구문이 작동한다는 것을 증명에서 내 (서투른) 시도는 다음과 같습니다

Imports Rhino.Mocks 

Public Class Class1 

    Public Sub Test() 
     Dim s = MockRepository.GenerateMock(Of IClass)() 
     Dim newList As New List(Of Integer) 

     newList.Add(10) 

     s.Stub(Function(x As IClass) x.Field).Return(newList) 

     MsgBox(s.Field(0)) 

    End Sub 

End Class 

Public Class AnotherClass 
    Implements IClass 

    Public ReadOnly Property Field() As List(Of Integer) Implements IClass.Field 
     Get 
      Return New List(Of Integer) 
     End Get 
    End Property 
End Class 

Public Interface IClass 
    ReadOnly Property Field() As List(Of Integer) 
End Interface 

즉, 나는에 표시된 번호 (10)와 메시지 상자를 얻을 수 (나는 접선하려고 귀찮게하지 않은 것 Class1.Test가 호출 될 때 단위 테스트 프레임 워크를 사용하여 차이를 만들 수는 없습니다.

호프가 도움이 될 것입니다. (VB.NET에서 RhinoMock으로 작업하려고하는 흥미로운 운동이었습니다).