Я использую инфраструктуру Moq для модульного тестирования и хотел бы иметь возможность передать действие для регистрации методов void.
let log = new Mock<ILog>()
let quot = <@ fun (mock:ILog) -> mock.Info(It.IsAny<string>) @>
let expr = (quot.ToLinqExpression() :?> Expression<Action<ILog>>)
log.Verify(expr)
Этот код завершается со следующей ошибкой:
System.InvalidCastException: невозможно преобразовать объект типа «System.Linq.Expressions.MethodCallExpressionN» для ввода «System.Linq.Expressions.Expression
1 [System.Action
1 [log4net.ILog]]».
Я могу распечатать тип, используя
printfn "%s" (quot.Type.ToString())
, который выводит
Microsoft.FSharp.Core.FSharpFunc`2[log4net.ILog,Microsoft.FSharp.Core.Unit]
Итак, как мне создать Действие?