Как создать тест fsunit для сопоставления с образцом в f#?

Я новичок в f# и fsUnit, и мне интересно, как проверить оператор сопоставления с образцом с помощью fsUnit. Например, если у меня есть следующий код, как бы вы написали для него тест fsunit?

let Menu () = 
    let Choice = Console.ReadLine()

        match Choice with
        | "A" | "a" -> Function1()
        | "B" | "b" -> Function2()
        | "C" | "c" -> Function3()
        | _ ->  Printfn"Error"

person Chimmy    schedule 22.12.2017    source источник
comment
Вы тестируете функции, тестируете произвольные блоки кода.   -  person Fyodor Soikin    schedule 22.12.2017


Ответы (1)


Прежде всего, вы должны отделить код, который реализует логику сопоставления, от кода, который считывает ввод, потому что вы можете только проверить правильность результата некоторого вызова:

let handleInput choice = 
    match choice with
    | "A" | "a" -> Function1()
    | "B" | "b" -> Function2()
    | "C" | "c" -> Function3()
    | _ ->  "Error"

let menu () = 
    let choice = Console.ReadLine()
    let output = handleInput choice
    printfn "%s" output

Теперь вы можете написать серию тестов, которые проверяют, что строка, возвращаемая handleInput, является строкой, которую вы ожидаете для каждого ввода:

handleInput "A" |> should equal "whatever Function 1 returns"
handleInput "b" |> should equal "whatever Function 2 returns"
handleInput "D" |> should equal "Error"
person Tomas Petricek    schedule 22.12.2017