Почему 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
ожидает возвращаемого значения.