【发布时间】:2020-08-05 15:30:44
【问题描述】:
我正在尝试替换这个 Rhino Mocks 实现:
private bool IsHandshakeCalled()
{
var args = httpExecutorBuilderStub.GetArgumentsForCallsMadeOn(st => st.ExecuteHttpWebRequestAndReturn(
Arg<HttpMethod>.Is.Anything, Arg<string>.Is.Anything, Arg<string>.Is.Anything));
if (args.Count > 0)
{
return args[0][0].Equals(HttpMethod.POST) &&
args[0][1].Equals("/api/v2/connection/command") &&
args[0][2].Equals(JsonConvert.SerializeObject(new HandshakeRequestDto(500)));
}
return false;
}
使用以下最小起订量实现:
private bool IsHandshakeCalled()
{
HttpMethod? capturedHttp = null;
string? capturedString1 = null;
string? capturedString2 = null;
httpExecutorBuilderStub.Setup(st => st.ExecuteHttpWebRequestAndReturn(
It.IsAny<HttpMethod>(), It.IsAny<string>(), It.IsAny<string>()))
.Callback<HttpMethod, string, string>((h, s1, s2) => {
capturedHttp = h;
capturedString1 = s1;
capturedString2 = s2;
});
if (capturedHttp != null)
{
return capturedHttp.Equals(HttpMethod.POST) &&
capturedString1.Equals("/api/v2/connection/command") &&
capturedString2.Equals(JsonConvert.SerializeObject(new HandshakeRequestDto(500)));
}
return false;
}
问题是,我的 Moq 实现没有收到原始参数。
可能我对 Moq 的 Callback() 方法有一些问题。
- 我做错了什么?
- 我应该使用一些不同的起订量方法吗?
【问题讨论】:
-
看不到被测对象在哪里锻炼。只有在调用模拟成员时才会调用回调。
-
如果在执行被测对象后调用它,则应使用
Verify来确认传递的参数
标签: c# .net moq rhino-mocks