我正在尝试使用 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 中运行它
任何帮助,将不胜感激。