Rhino Mocks:如何使用vb.net和AAA语法验证方法只调用一次

Pau*_*ann 5 vb.net unit-testing rhino-mocks

我试图在Rhino Mocks和VB.Net中使用AAA语法来验证方法只被调用一次.我似乎无法做对.使用此代码,如果存储库被调用两次,则在第二次调用时不返回任何内容,并且测试通过.我希望在调用VerifyAllExpectations时测试失败.

<TestMethod()>
Public Sub GetDataCallsRepositoryOneTime()
    Dim repository As IDataRepository = MockRepository.GenerateMock(Of IDataRepository)()
    Dim cacheRepository As New CachingDataRepository(repository)
    Dim results1 As IEnumerable(Of DataItem)
    Dim results2 As IEnumerable(Of DataItem)

    'verify that the base repository was asked for its data one time only
    repository.Expect(Function(x) x.GetData(1)).Return(GetSampleData).Repeat.Once()

    results1 = cacheRepository.GetData(1)
    results2 = cacheRepository.GetData(1)

    sdr.VerifyAllExpectations()
End Sub
Run Code Online (Sandbox Code Playgroud)

Tor*_*ups 4

如果您使用 VS2010,您将获得改进的 lamba 支持(包括使用带有 VB 的 Rhino Mocks 获得更好的体验)

我概述了如何在此处使用 AAA 语法和 rhino 模拟(使用 C#),但要快速回答您的问题,您可以执行以下操作

首先是你想要验证一些交互行为的类(超级简单但有效)

Public Class Class1
    Public Overridable Sub Happy()

    End Sub

    Public Overridable Sub DoIt()
        Me.Happy()
        Me.Happy()
    End Sub
End Class
Run Code Online (Sandbox Code Playgroud)

接下来使用 AAA + vb 编写的测试来证明 Happy 方法被调用了 2x

<TestClass()>
Public Class UnitTest2

    <TestMethod()>
    Public Sub TestMethod1()
        Dim x = MockRepository.GeneratePartialMock(Of Class1)()

        x.DoIt()

        x.AssertWasCalled(Sub(y) y.Happy(), Sub(z) z.Repeat.Times(2))
    End Sub

End Class
Run Code Online (Sandbox Code Playgroud)