Korzystam z frameworka Moq do testowania jednostkowego i chciałbym móc przekazać w akcji do rejestrowania nieważnych metod.Jak mogę utworzyć działanie <T> w F #?
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)
Kod ten nie powiedzie się z powodu następującego błędu:
System.InvalidCastException : Unable to cast object of type 'System.Linq.Expressions.MethodCallExpressionN' to type 'System.Linq.Expressions.Expression
1[System.Action
1[log4net.ILog]]'.
mogę wydrukować typ przy użyciu
printfn "%s" (quot.Type.ToString())
który wyprowadza
Microsoft.FSharp.Core.FSharpFunc`2[log4net.ILog,Microsoft.FSharp.Core.Unit]
Więc, jak mogę stworzyć akcję?
Moq w F # -> chyba zły pomysł . –
Tak, w F #, zamiast tego mamy Foq - patrz http://trelford.com/blog/post/Foq.aspx i http://trelford.com/blog/post/FoqItEasy.aspx (Bardzo łatwe przejście z Moq) –