2

次のようなテスト コードがあります。

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

ただし、このコードは期待どおりに動作しません。予想どおり、変数には 99resultが含まれていません。Integer.MinValue

C# で同等のコードを記述した場合、期待どおりに動作します: result99 が含まれています。

理由はありますか?

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

1 に答える 1

0

違いは、 をFunction(invocation) invocation.ReturnValue = 99返すインライン関数と、 を返し、 に設定するインライン関数です。Booleaninvocation => invocation.ReturnValue = 9999invocation.ReturnValue99

十分に新しいバージョンの VB.NET を使用している場合は、戻り値が必要でSub(invocation) invocation.ReturnValue = 99ない限り使用できます。WhenCalled

于 2014-03-29T06:59:53.283 に答える