2013-07-11 56 views
2

我有類似這樣的測試代碼:爲什麼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

您應該提供C#代碼。你認爲等同的東西可能不是這樣,也可能是答案所在。 – nathanchere

+0

呵呵,你爲什麼提供兩個不同的返回值?你不能放棄'WhenCalled()',只使用'Return()'?不知道分歧行爲的原因。 –

回答

0

的差異將是Function(invocation) invocation.ReturnValue = 99是一個內聯函數返回一個Boolean,其中作爲invocation => invocation.ReturnValue = 99是一個內聯函數返回99和設置invocation.ReturnValue99

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

相關問題