让我上这样的课:
Public Class MyClass
Implements IMyClass
Public Function GetSomething(firstParameter As String, secondParameter As String, ByRef thirdParameter As String) As Boolean Implements IMyClass.GetSomething
thirdParameter = _secondDependency.GetSomething(firstParameter, thirdParameter)
Return True
End Function
'rest of class
现在在我的测试中,我正在使用 NUnit 和 Moq lib,并且想要设置这个模拟类
_mockMyClass.Setup(
Function(myClass) myClass.GetSomething(It.IsAny(Of String), It.IsAny(Of String), It.IsAny(Of String))).Returns(True)
但我不知道如何将thirdParameter设置为我定义的某个字符串,因为它是通过引用传递的,而且我不知道如何使用最小起订量来做到这一点。我想在不更改模拟类的情况下执行此操作。
我从来没有这样做过,但是根据我刚刚进行的两分钟的网络搜索和阅读,看起来你需要这样做:
var str = It.IsAny(Of String)
_mockMyClass.Setup(
Function(myClass) myClass.GetSomething(It.IsAny(Of String), It.IsAny(Of String), str)).Returns(True)
这是基于此处提供的 C# 示例。 VB 的
ByRef
相当于 C# 的 ref
。
经过一番挖掘,我得到了这个,它可以完成工作:
_mockMyClass.
Setup(Function(myClass) myClass.GetSomething(It.IsAny(Of String), It.IsAny(Of String), It.IsAny(Of String))).
Callback(
Sub(firstParameter As String, secondParameter As String, ByRef thirdParameter As String)
thirdParameter = "someString"
End Sub).
值得注意的是,这适用于 Moq 4.8+