Утверждение исключения в FsUnit F# для XUnit
Я пытаюсь утверждать, что было сгенерировано исключение. Вот сокращенный фрагмент кода, который воспроизводит проблему:
open FsUnit
open Xunit
let testException () =
raise <| Exception()
[<Fact>]
let ``should assert throw correctly``() =
(testException ())
|> should throw typeof<System.Exception>
Ошибка говорит о том, что было сгенерировано исключение System.Exception, но тест должен пройти, поскольку это то, что я утверждаю. Может кто-нибудь, пожалуйста, помогите, где я иду не так.
2 ответа
Вы звоните testException
функции, а затем передать свой результат в качестве аргумента should
функция. Во время выполнения, testException
вылетает, и поэтому никогда не возвращает результат, и поэтому should
функция никогда не вызывается.
Если вы хотите should
Функция, чтобы поймать и правильно сообщить об исключении, вам нужно передать его testException
сама функция, а не ее результат (ибо в первую очередь нет результата). Таким образом, should
функция сможет вызывать testException
в пределах try..with
заблокировать и, таким образом, поймать исключение.
testException |> should throw typeof<System.Exception>
Кажется, это помогает:
[<Fact>]
let ``should assert throw correctly``() =
(fun () -> Exception() |> raise |> ignore)
|> should throw typeof<System.Exception>
Не совсем уверен, почему требуется игнорирование tbh. Не нашел ничего, чтобы это объяснить.