如何在VB.NET中使用RhinoMocks设置readonly属性的返回值?

时间:2009-07-06 15:29:14

标签: vb.net rhino-mocks

我在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属性设置返回值?

1 个答案:

答案 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是一项有趣的练习)。