excepción de prueba fsunit.xunit en el constructor
-
21-12-2019 - |
Pregunta
Teniendo
type Category(name : string, categoryType : CategoryType) =
do
if (name.Length = 0) then
invalidArg "name" "name is empty"
Estoy intentando probar esta excepción usando FsUnit + xUnit:
[<Fact>]
let ``name should not be empty``() =
(fun () -> Category(String.Empty, CategoryType.Terminal)) |> should throw typeof<ArgumentException>
pero cuando corre veo XUnit.MatchException.¿Qué estoy haciendo mal?
Solución
Si bien no soy un experto en FsUnit, creo que el MatchException
Se espera el tipo, porque FsUnit utiliza comparadores personalizados y la coincidencia no se realiza correctamente.
Sin embargo, la prueba, tal como está escrita, parece ser incorrecta, porque
(fun () -> Category(String.Empty, CategoryType.Terminal)
es una función con la firma unit -> Category
, pero realmente no te importan los devueltos. Category
.
En su lugar, puedes escribirlo como
[<Fact>]
let ``name should not be empty``() =
(fun () -> Category(String.Empty, CategoryType.Terminal) |> ignore)
|> should throw typeof<ArgumentException>
Observe el agregado ignore
palabra clave, que ignora la Category
valor de retorno.Esta prueba pasa y falla si elimina la Cláusula de Protección.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow