具有
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。 我做错了什么?
答案 0 :(得分:4)
虽然我不是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
返回值。如果您删除了Guard子句,则此测试通过并失败。