为XUnit在FsUnit F#中断言异常
我试图断言抛出了异常。下面是一段复制问题的简化代码:为XUnit在FsUnit F#中断言异常,f#,fsunit,F#,Fsunit,我试图断言抛出了异常。下面是一段复制问题的简化代码: open FsUnit open Xunit let testException () = raise <| Exception() [<Fact>] let ``should assert throw correctly``() = (testException ()) |> should throw typeof<System.Exception> 打开FsUnit
open FsUnit
open Xunit
let testException () =
raise <| Exception()
[<Fact>]
let ``should assert throw correctly``() =
(testException ())
|> should throw typeof<System.Exception>
打开FsUnit
开放式Xunit
let testException()=
提高应扔类型
错误表明抛出了System.Exception,但测试应该通过,因为这就是我所断言的。有人能帮我找出哪里出了问题。您正在调用
testException
函数,然后将其结果作为参数传递给should
函数。在运行时,testException
崩溃,因此永远不会返回结果,因此永远不会调用should
函数
如果您希望应该
函数捕获并正确报告异常,则需要将testException
函数本身传递给它,而不是它的结果(因为首先没有结果)。这样,should
函数将能够在try..with
块中调用testException
,从而捕获异常
testException |> should throw typeof<System.Exception>
testException |>应抛出typeof
这似乎起到了作用:
[<Fact>]
let ``should assert throw correctly``() =
(fun () -> Exception() |> raise |> ignore)
|> should throw typeof<System.Exception>
[]
let``应该正确地断言throw`()=
(乐趣()->Exception()|>raise |>ignore)
|>应该抛出类型
不确定为什么需要忽略tbh。找不到任何解释。对我做错的地方很有意义,但是我刚刚尝试过,现在我得到了一个匹配异常,上面写着预期:系统。异常,实际:was“SqlJuxtFunctionalTests.Tests.TableBuilder.PrimaryKeyTests+在尝试使用引用可为null的群集主键构建表时应引发异常column@116“我相信这是我函数的名称,所以感觉整个函数都与异常匹配,函数没有被执行。我想你可能误解了你的问题。你函数的签名是什么?你到底是怎么通过的?请显示您的实际代码。testException函数的签名是unit->a'代码是:
let testException()=raise应该抛出typeof