Я пытаюсь использовать 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
Буду признателен за любую помощь.