Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为XUnit在FsUnit F#中断言异常_F#_Fsunit - Fatal编程技术网

为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