有
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
返回值。该测试通过,但如果您删除“保护条款”,则失败。关于f# - 构造函数中的fsunit.xunit测试异常,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23042547/