gpt4 book ai didi

c# - 为什么 RhinoMocks 在 VB 和 C# 中表现不同?

转载 作者:太空宇宙 更新时间:2023-11-03 16:10:37 25 4
gpt4 key购买 nike

我有类似这样的测试代码:

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

最佳答案

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

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

关于c# - 为什么 RhinoMocks 在 VB 和 C# 中表现不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17591973/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com