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 ?

  1. Tester le code source
  2. Code source du type de catégorie
Était-ce utile?

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
scroll top