【发布时间】:2021-07-15 22:35:34
【问题描述】:
我正在尝试使用 Moq 分配回调,但无法弄清楚如何定义返回布尔值的 lambda 函数。在 C# 中,这对我来说非常简单,但我在尝试将其转换为 F# 等效项时遇到了问题。
let mockHttpMessageHandler = Mock<HttpMessageHandler>(MockBehavior.Strict)
mockHttpMessageHandler
.Protected()
.Setup<Task<HttpResponseMessage>>(
"SendAsync",
It.IsAny<HttpRequestMessage>()
)
.ReturnsAsync(
dummyHttpResponseMessage
)
.Callback<HttpClient>(fun r -> r.DefaultRequestHeaders.Contains("SomeHeaderHere"))
.Verifiable()
正如您从屏幕截图中看到的那样,我收到一个 FS0001 错误,指出该表达式应具有单位 (void) 类型,但它返回一个布尔值(这实际上是我想要返回的类型。
屏幕截图显示我正在寻找一个空字符串,它不会是最终代码所反映的内容,但可以用作示例,并且非空字符串仍然会产生相同的错误,因此与问题无关。
我将如何修改这个 lambda 表达式来表达函数以期望 boolean 的结果而不是 void?
【问题讨论】:
-
错误信息是正确的。 Moq 的
Callback函数需要一个返回unit的lambda,而不是bool。我认为这通常用于modify the data or cause some other side-effect。也许您可以发布您要翻译的 C# 代码,以便我们了解您要做什么? -
我打算发布 C# 代码,直到再次查看它并观察您的评论后,它似乎是我在翻译中的错误。甚至我引用的 C# 代码也说明了数据的操作,因此它也没有返回任何内容。