我正在尝试使用Pose(https://github.com/tonerdo/pose)填充printfn
,以便可以对传递给它的内容进行单元测试。如果我传递的TextWriterFormat
不需要附加参数,我就设法使其正常工作,但是当我尝试填充确实需要附加参数的参数时,我得到了实例类型不匹配的异常
这有效:
let workingPrintfTest () =
let a = Printf.TextWriterFormat<unit>("herp")
Printf.printfn a
let workingShim =
Shim
.Replace(fun () ->
Printf.printfn(Is.A<Printf.TextWriterFormat<unit>>())
)
.With(Func<Printf.TextWriterFormat<unit>, unit>(fun s ->
Console.WriteLine("Hijacked: " + s.ToString())
))
PoseContext.Isolate ((fun () ->
Program.workingPrintfTest () // Hijacked: herp
), workingShim)
但是,当我得到不匹配的实例类型异常时,当我将herp
更改为herp: %s
并且TextWriterFormat
变成TextWriterFormat<string -> unit>
时。
这引发异常:
let printfTest toPrint =
let a = Printf.TextWriterFormat<string -> unit>("herp: %s")
Printf.printfn a toPrint
let shim =
Shim
.Replace(fun () ->
let a = Is.A<Printf.TextWriterFormat<string -> unit>>()
Printf.printfn a (Is.A<string>())
)
.With(Func<Printf.TextWriterFormat<string -> unit>, unit>(fun s ->
Console.WriteLine("Hijacked: " + s.ToString())
()
)
)
PoseContext.Isolate ((fun () ->
Program.printfTest "www"
), shim)
以及伴随的异常:Pose.Exceptions.InvalidShimSignatureException: Mismatched instance types
我正在.Net Core 2.2中运行它
任何帮助将不胜感激。