简单的Moq? - .Verify问题

时间:2010-04-27 17:56:36

标签: moq

这里只是一个简单的问题。我已经使用了Moq一段时间了,但是,到目前为止,它只用于存根而不是用于模拟。我正在尝试向开发人员介绍单元测试。我设置了一个简单的例子来解释这些概念,但我似乎无法让它发挥作用。可能是一些简单的事情,所以我想我会问你们所有人,看看我做错了什么:

    <Test()> _
Public Sub Divide_DivideByZero_LogsError()
    Dim mock = New Mock(Of ILogger)
    With mock
        Dim calc = New MyCalculator(New CalculatorData, .Object)
        calc.Divide(55, 0)
        .Verify(Function(x) CType(x,ILogger).WriteError(it.IsAny(of String),It.IsAny(Of String))))
    End With
End Sub

我正在使用Moq版本3.2.416.3。我在.verify上收到错误,告诉我我用不正确的参数调用它。我只是想验证.WriteError是否被调用。任何帮助将不胜感激。

编辑: 好的,如果我将“.WriteError”从子(void返回)更改为返回布尔值的函数,它可以正常工作。 WriteError实际上不需要是一个函数。有谁知道为什么sub不起作用?

2 个答案:

答案 0 :(得分:1)

  

编辑:好的,如果我将“.WriteError”从子(void返回)更改为返回布尔值的函数,它可以工作。 WriteError实际上不需要是一个函数。有谁知道为什么sub不起作用?

据我所知,VB9不支持匿名Subs(仅限函数),而且它是VB.net中Moq使用的严重阻止。 因此,很快,当您将WriteError签名从Sub更改为Function时,编译器已成功解析了Verify parametrer中匿名函数的返回类型。

答案 1 :(得分:0)

我认为您需要在实际调用Verifiable()之前将其设为Verify()。我不确定它是否可以自动验证。

恕我直言,我发现使用VerifyAll()要比验证个别方法容易得多。即:

mock.Setup(Function(x) CType(x, ILogger).WriteError(It.IsAny(Of String), It.IsAny(Of String))) _
    .Verifiable()
mock.Object.WriteError("test", "Test")
mock.VerifyAll()

不确定我是否能获得所有方法名称/签名,但您应该明白这一点。