F#- 如何在 F# 中使用 Assert.Multiple

F#- How to use Assert.Multiple with F#

我正在 运行 进行一些 NUnit 测试,并希望我的每个测试用例都 运行 所有断言,直到块结束,然后再退出,即使断言失败的情况很少。我看到有 Assert.Multiple (https://github.com/nunit/docs/wiki/Multiple-Asserts) 可以达到这个目的,但我收到一个错误:

没有匹配方法 'Multiple' 的重载。可用的重载如下所示。 可能的过载:'Assert.Multiple(testDelegate: TestDelegate) : unit'。类型约束不匹配。类型 'unit' 与类型 'TestDelegate' 不兼容。 可能过载:'Assert.Multiple(testDelegate: AsyncTestDelegate) : unit'。类型约束不匹配。类型 'unit' 与类型 'AsyncTestDelegate' 不兼容。 已完成项目 "NUnitTestProject1.fsproj" 中的构建目标 "CoreCompile" -- 失败。

如果我有这样的测试:

 [<Test>]
let getResponseCode () =
    let response = Request.createUrl Post "https://reqres.in/api/users"
                |> Request.setHeader (ContentType (ContentType.create("application", "json")))
                |> Request.bodyString """{ 
    "name": "morpheus",
    "job": "leader"}"""

                |> HttpFs.Client.getResponse
                |> run

     Assert.Multiple(() =>

                Assert.AreEqual(200,response.statusCode)
                Assert.AreEqual(215,response.contentLength)
            )

我应该怎么写才不会在使用 Assert.Multiple 时出现错误?提前致谢。

你需要在这里使用lambda。你在那里使用的语法是 lambda 的 C# 语法,在 F# 中语法是 fun () -> ...,所以在你的情况下它看起来像

Assert.Multiple(fun () ->
    Assert.AreEqual(200, response.StatusCode)
    Assert.AreEqual(215, response.ContentLength)
)