为什么RhinoMocks在VB&;C#

本文关键字:amp VB RhinoMocks 为什么 | 更新日期: 2023-09-27 18:22:01

我有类似的测试代码:

Public Interface IDoSomething
   Function DoSomething(index As Integer) As Integer
End Interface
<Test()>
Public Sub ShouldDoSomething()
   Dim myMock As IDoSomething = MockRepository.GenerateMock(Of IDoSomething)()
   myMock.Stub(Function(d) d.DoSomething(Arg(Of Integer).Is.Anything))
      .WhenCalled(Function(invocation) invocation.ReturnValue = 99)
      .Return(Integer.MinValue)
   Dim result As Integer = myMock.DoSomething(808)
End Sub

不过,这段代码的行为并不像预期的那样。变量result包含Integer.MinValue,而不是预期的99。

如果我用C#编写等效的代码,它会像预期的那样工作:result包含99。

有什么想法吗?

C#等价物:

public interface IDoSomething
{
   int DoSomething(int index)
}
[test()]
public void ShouldDoSomething()
{
   var myMock = MockRepository.GenerateMock<IDoSomething>();
   myMock.Stub(d => d.DoSomething(Arg<int>.Is.Anything))
      .WhenCalled(invocation => invocation.ReturnValue = 99)
      .Return(int.MinValue);
   var result = myMock.DoSomething(808);
}

为什么RhinoMocks在VB&;C#

区别在于Function(invocation) invocation.ReturnValue = 99是一个返回Boolean的内联函数,其中invocation => invocation.ReturnValue = 99是返回99并将invocation.ReturnValue设置为99的内联函数。

如果您使用的VB.NET版本足够晚,则可以使用Sub(invocation) invocation.ReturnValue = 99,除非WhenCalled需要返回值。