exception de test fsunit.xunit dans le constructeur
-
21-12-2019 - |
Question
Ayant
type Category(name : string, categoryType : CategoryType) =
do
if (name.Length = 0) then
invalidArg "name" "name is empty"
j'essaie de tester cette exception en utilisant FsUnit + xUnit :
[<Fact>]
let ``name should not be empty``() =
(fun () -> Category(String.Empty, CategoryType.Terminal)) |> should throw typeof<ArgumentException>
mais quand il fonctionne, je vois XUnit.MatchException.Qu'est-ce que je fais de mal ?
La solution
Bien que je ne sois pas un expert de FsUnit, je pense que le MatchException
type est attendu, car FsUnit utilise des correspondants personnalisés et la correspondance échoue.
Cependant, le test, tel qu'il est rédigé, semble incorrect, car
(fun () -> Category(String.Empty, CategoryType.Terminal)
est une fonction avec la signature unit -> Category
, mais vous ne vous souciez pas vraiment du retour Category
.
Au lieu de cela, vous pouvez l'écrire comme
[<Fact>]
let ``name should not be empty``() =
(fun () -> Category(String.Empty, CategoryType.Terminal) |> ignore)
|> should throw typeof<ArgumentException>
Notez l'ajout ignore
mot-clé, qui ignore le Category
valeur de retour.Ce test réussit et échoue si vous supprimez la clause de garde.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow