我在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)
它在编译时失败,因为Posts是一个只读属性。
然后我尝试了一个lambda表达式,它适用于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为readonly属性设置返回值?
答案 0 :(得分:1)
IUserDto
是一个界面吗?如果它是那么它应该工作。如果不是,则问题可能是所讨论的readonly属性不可覆盖。 RhinoMocks只能模拟在接口中定义的属性/方法,或者可以被覆盖。
这是我(笨拙)尝试证明lambda语法应该有效:
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中使用RhinoMocks是一项有趣的练习)。