2

我试图断言抛出了异常。这是重现该问题的一段精简代码:

open FsUnit
open Xunit

let testException () =
    raise <| Exception()

[<Fact>]
let ``should assert throw correctly``() =
    (testException ())
        |> should throw typeof<System.Exception>

该错误表明抛出了 System.Exception 但测试应该通过,因为这就是我所断言的。有人可以帮忙解决我哪里出错了。

4

2 回答 2

3

您正在调用该testException函数,然后将其结果作为参数传递给该should函数。在运行时,testException崩溃等永远不会返回结果,因此should永远不会调用该函数。

如果您希望should函数捕获并正确报告异常,您需要将testException函数本身传递给它,而不是它的结果(因为首先没有结果)。这样,该should函数将能够testExceptiontry..with块内调用,从而捕获异常。

testException |> should throw typeof<System.Exception>
于 2017-01-12T21:18:29.477 回答
0

这似乎可以解决问题:

[<Fact>]
let ``should assert throw correctly``() =
    (fun () -> Exception() |> raise |> ignore)
        |> should throw typeof<System.Exception>

不太确定为什么需要忽略。没有找到任何可以解释这一点的东西。

于 2021-05-11T09:28:57.503 回答