我在 VB.NET 中使用 RhinoMock,需要设置只读列表的返回值。
这就是我的want要做(但不起作用):
dim s = Rhino.Mocks.MockRepository.GenerateStub(of IUserDto)()
s.Id = guid.NewGuid
s.Name = "Stubbed name"
s.Posts = new List(of IPost)
它在编译时失败,因为 Posts 是只读属性。
然后我尝试了 lambda 表达式,它对于函数调用工作得很好,但对于属性则不太适用。这无法编译。
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 设置只读属性的返回值?
Is IUserDto
一个接口?如果是的话它应该可以工作。如果不是,那么问题可能是所讨论的只读属性不可重写。 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
即,当调用 Class1.Test 时,我会收到一个消息框,上面显示数字 10(我没有费心尝试用它连接单元测试框架,但这应该不会产生影响)。
希望能有所帮助(无论如何,尝试在 VB.NET 中使用 RhinoMocks 是一个有趣的练习)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)