Próbuję dowiedzieć się, jak poprawnie testować wyjątki z FsUnit. Urzędowa dokumentacja, że do testowania wyjątkami muszę prawej coś takiego:Jak poprawnie przetestować wyjątki z FsUnit
(fun() -> failwith "BOOM!" |> ignore) |> should throw typeof<System.Exception>
Ale jeśli nie oznaczyć metodę testową z [<ExpectedException>]
atrybut będzie zawsze niepowodzeniem. Brzmi rozsądnie, ponieważ jeśli chcemy przetestować wyjątki, musimy dodać taki atrybut w C# + NUnit.
Ale tak długo, jak dodałem ten atrybut, nie ma znaczenia, jaki rodzaj wyjątku, który próbuję wyrzucić, będzie on zawsze obsługiwany.
Niektóre fragmenty: Moi LogicModule.fs
exception EmptyStringException of string
let getNumber str =
if str = "" then raise (EmptyStringException("Can not extract number from empty string"))
else int str
Moi LogicModuleTest.fs
[<Test>]
[<ExpectedException>]
let``check exception``()=
(getNumber "") |> should throw typeof<LogicModule.EmptyStringException>
FYI - z Unquote, https://code.google.com/p/unquote/, zapewniłbyś, że 'getNumber" "' w twoim ostatnim przykładzie podnosi oczekiwany wyjątek, taki jak 'podnosi<@ getNumber" "@ > ' –