Исключение теста fsunit.xunit в конструкторе
-
21-12-2019 - |
Вопрос
Имея
type Category(name : string, categoryType : CategoryType) =
do
if (name.Length = 0) then
invalidArg "name" "name is empty"
я пытаюсь проверить это исключение, используя FsUnit + xUnit:
[<Fact>]
let ``name should not be empty``() =
(fun () -> Category(String.Empty, CategoryType.Terminal)) |> should throw typeof<ArgumentException>
но когда он запускается, я вижу XUnit.MatchException.Что я делаю не так?
Решение
Хотя я не являюсь экспертом по FsUnit, я думаю, что MatchException
ожидается тип, поскольку FsUnit использует пользовательские сопоставители, и сопоставление не удается.
Однако тест в том виде, в котором он написан, кажется неверным, поскольку
(fun () -> Category(String.Empty, CategoryType.Terminal)
это функция с сигнатурой unit -> Category
, но тебя не особо волнует вернувшееся Category
.
Вместо этого вы можете написать это как
[<Fact>]
let ``name should not be empty``() =
(fun () -> Category(String.Empty, CategoryType.Terminal) |> ignore)
|> should throw typeof<ArgumentException>
Обратите внимание на добавленное ignore
ключевое слово, которое игнорирует Category
возвращаемое значение.Этот тест пройдет успешно и завершится неудачно, если вы удалите защитное предложение.
Не связан с StackOverflow