Ich benutze das Moq-Framework für Komponententests und möchte in der Lage sein, Aktion für das Protokollieren void Methoden übergeben.Wie kann ich eine Aktion <T> in F # erstellen?
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)
Dieser Code schlägt mit dem folgenden Fehler:
System.InvalidCastException : Unable to cast object of type 'System.Linq.Expressions.MethodCallExpressionN' to type 'System.Linq.Expressions.Expression
1[System.Action
1[log4net.ILog]]'.
ich die Art
mit drucken können ausprintfn "%s" (quot.Type.ToString())
die
gibtMicrosoft.FSharp.Core.FSharpFunc`2[log4net.ILog,Microsoft.FSharp.Core.Unit]
Also, wie kann ich eine Aktion erstellen?
Moq in F # -> wahrscheinlich eine schlechte Idee . –
Yeps, in F #, wir Foq stattdessen - siehe http://trelford.com/blog/post/Foq.aspx und http://trelford.com/blog/post/FoqItEasy.aspx (sehr einfacher Übergang von Moq) –