2009-07-06 2 views
3

Ich benutze RhinoMock in VB.NET und ich muss den Rückgabewert für eine schreibgeschützte Liste festlegen.Wie richte ich den Rückgabewert für eine Readonly-Eigenschaft mit RhinoMocks in VB.NET ein?

Hier ist, was ich tun möchte (aber nicht funktioniert):

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

Es ist auf der Kompilierung schlägt fehl, weil Beiträge eine Nur-Lese-Eigenschaft ist.

Dann habe ich einen Lambda-Ausdruck versucht, der für Funktionsaufrufe funktioniert, aber nicht so sehr für Eigenschaften. Dies kann nicht kompiliert werden.

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

Next (andernfalls) Versuch war SetupResults zu verwenden, aber dies scheiterte die besagt, dass es nicht im Wiedergabemodus verwendet werden kann.

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

Was mich zurück zu meiner Frage bringt:

Wie richte ich einen Rückgabewert für eine Nur-Lese-Eigenschaft mit RhinoMocks in VB.NET?

+0

Warum genau Rhino.Mocks.SetupResult.For (s.Posts) .Return (Neue Liste (von IPost)) fehlgeschlagen? – Grzenio

+0

Fehler beim Angeben, dass es im Wiedergabemodus nicht gültig ist – Rick

+0

Können Sie mehr Code bereitstellen? Es hört sich so an, als könnte man die neue AAA-Syntax mit der älteren Record-Playback-Methode verwechseln, die nicht helfen würde. Ich bin nicht vertraut mit VB.NET aber Stubbing eine Readonly-Eigenschaft (d. H. Eine Eigenschaft ohne Setter) kann sehr einfach in C# getan werden. – jpoh

Antwort

1

Ist IUserDto eine Schnittstelle? Wenn es dann geht, sollte es einfach funktionieren. Wenn dies nicht der Fall ist, könnte das Problem sein, dass die betreffende schreibgeschützte Eigenschaft nicht überschrieben werden kann. RhinoMocks kann nur Eigenschaften/Methoden vortäuschen, die in einer Schnittstelle definiert sind oder überschrieben werden können.

Hier ist mein (ungeschickt) Versuch zu beweisen, dass die Lambda-Syntax funktionieren soll:

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 

dh ich würde ein Meldungsfeld mit der Nummer 10 auf es angezeigt bekommen (ich nicht der Mühe, zu versuchen, Einhaken ein Unit-Testing-Framework mit diesem aber das sollte keinen Unterschied machen), wenn Class1.Test aufgerufen wird.

Hoffe das hilft (es war eine interessante Übung, in jedem Fall mit RhinoMocks in VB.NET arbeiten).

Verwandte Themen