Почему RhinoMocks ведет себя по-разному в VB & C#?

У меня есть тестовый код, похожий на этот:

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);
}

1 ответ

Решение

Разница будет Function(invocation) invocation.ReturnValue = 99 это встроенная функция, возвращающая Boolean, в то время как invocation => invocation.ReturnValue = 99 это встроенная функция, возвращающая 99 и настройка invocation.ReturnValue в 99,

Если вы используете достаточно позднюю версию VB.NET, вы можете использовать Sub(invocation) invocation.ReturnValue = 99 если WhenCalled ожидает возвращаемого значения.

Другие вопросы по тегам