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?

  1. Código fuente de prueba
  2. Código fuente del tipo de categoría
¿Fue útil?

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