F # Использование Pose для Shim printfn для модульного тестирования - PullRequest
1 голос
/ 04 мая 2019

Я пытаюсь использовать 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

Буду признателен за любую помощь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...