F#使用Pose填充printfn进行单元测试

时间:2019-05-04 17:38:46

标签: unit-testing .net-core f#

我正在尝试使用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中运行它

任何帮助将不胜感激。

0 个答案:

没有答案