Я пытаюсь понять, как правильно тестировать исключения с помощью FsUnit. Официальная документация гласит, что для проверки исключений я должен исправить что-то вроде этого:
(fun () -> failwith "BOOM!" |> ignore) |> should throw typeof<System.Exception>
Но если я не отмечу свой тестовый метод атрибутом [<ExpectedException>]
, он всегда будет терпеть неудачу. Звучит разумно, потому что если мы хотим протестировать исключения, мы должны добавить такой атрибут в C# + NUnit.
Но пока я добавляю этот атрибут, не имеет значения, какое исключение я пытаюсь создать, оно всегда будет обрабатываться.
Некоторые фрагменты: Мой LogicModule.fs
exception EmptyStringException of string
let getNumber str =
if str = "" then raise (EmptyStringException("Can not extract number from empty string"))
else int str
Мой LogicModuleTest.fs
[<Test>]
[<ExpectedException>]
let``check exception``()=
(getNumber "") |> should throw typeof<LogicModule.EmptyStringException>
getNumber ""
в вашем последнем примере вызывает ожидаемое исключение, напримерraises<LogicModule.EmptyStringException> <@ getNumber "" @>
- person Stephen Swensen   schedule 28.04.2013