gpt4 book ai didi

F# - 如何使用 fsunit 测试构造函数中引发的异常?

转载 作者:行者123 更新时间:2023-12-05 05:11:31 24 4
gpt4 key购买 nike

我想检查传递给类型构造函数 的参数是否有效。
我检查它并在无效时引发 ArgumentException
我想为此行为创建一个测试。我想使用 Assert.throws 或最好使用 FSUnit 而不是 try/with block 。

#package "FsUnit@3.4.1"
#package "nunit@3.11.0"

open System
open FSUnit

type configuration = {aaa:int}

type Client(conf:configuration) =
do
if conf.aaa < 3 then raise (ArgumentException("aaa must be at least 3"))

member this.do_something() =
()

//测试

    // 1. does not "compile"
Assert.Throws<ArgumentException>(fun () -> Client(configuration) |> ignore)

// 2. does not work
//Assert.Throws<ArgumentException>( fun () ->
// let a = Client(configuration);
// a
// |> ignore)

// 3. does not work
(fun() -> Client(configuration)) |> ignore |> should throw typeof<ArgumentException>


// 4. OK but... bleah!
try
Client(configuration) |> ignore
Assert.Fail()
with
| :? ArgumentException -> Assert.Pass() |> ignore
| _ -> Assert.Fail()

最佳答案

您的第一种方法对我来说效果很好 - 我只需要定义 configuration ,它不包含在您的问题中,但大概在您的实际文件中的某处定义。以下编译和行为符合我的预期:

let configuration = { aaa = 1 }
Assert.Throws<ArgumentException>(fun () -> Client(configuration) |> ignore)

你的第二个代码片段不起作用,因为它在错误的地方有 ignore - 你忽略了整个函数(其中包含你要测试的代码)然后你传递了 unit 到断言。 ignore 调用需要在函数的内部,以便忽略调用构造函数的结果。以下对我有用:

(fun() -> Client(configuration) |> ignore) |> should throw typeof<ArgumentException>

关于F# - 如何使用 fsunit 测试构造函数中引发的异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55367481/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com