在 FsUnit F# for XUnit 中断言异常
Asserting exception in FsUnit F# for XUnit
我正在尝试断言抛出了异常。这是重现问题的一段简化代码:
open FsUnit
open Xunit
let testException () =
raise <| Exception()
[<Fact>]
let ``should assert throw correctly``() =
(testException ())
|> should throw typeof<System.Exception>
错误说抛出了 System.Exception 但测试应该通过,因为这就是我所断言的。有人可以帮助我哪里出错了。
您正在调用 testException
函数,然后将其结果作为参数传递给 should
函数。在运行时,testException
崩溃,因此永远不会 returns 结果,因此永远不会调用 should
函数。
如果你想让 should
函数捕获并正确报告异常,你需要将 testException
函数本身传递给它,而不是它的结果(因为首先没有结果).这样,should
函数将能够在 try..with
块中调用 testException
,从而捕获异常。
testException |> should throw typeof<System.Exception>
这似乎可以解决问题:
[<Fact>]
let ``should assert throw correctly``() =
(fun () -> Exception() |> raise |> ignore)
|> should throw typeof<System.Exception>
不太确定为什么需要忽略。找不到任何解释。
我正在尝试断言抛出了异常。这是重现问题的一段简化代码:
open FsUnit
open Xunit
let testException () =
raise <| Exception()
[<Fact>]
let ``should assert throw correctly``() =
(testException ())
|> should throw typeof<System.Exception>
错误说抛出了 System.Exception 但测试应该通过,因为这就是我所断言的。有人可以帮助我哪里出错了。
您正在调用 testException
函数,然后将其结果作为参数传递给 should
函数。在运行时,testException
崩溃,因此永远不会 returns 结果,因此永远不会调用 should
函数。
如果你想让 should
函数捕获并正确报告异常,你需要将 testException
函数本身传递给它,而不是它的结果(因为首先没有结果).这样,should
函数将能够在 try..with
块中调用 testException
,从而捕获异常。
testException |> should throw typeof<System.Exception>
这似乎可以解决问题:
[<Fact>]
let ``should assert throw correctly``() =
(fun () -> Exception() |> raise |> ignore)
|> should throw typeof<System.Exception>
不太确定为什么需要忽略。找不到任何解释。