我正在运行一些 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)
)
Run Code Online (Sandbox Code Playgroud)
我应该如何编写它以便它不会在使用 Assert.Multiple 时给我一个错误?提前致谢。
您需要在这里使用 lambda。您在那里使用的语法是 lambda 的 C# 语法,在 F# 中,语法是fun () -> ...,因此在您的情况下,它看起来像
Assert.Multiple(fun () ->
Assert.AreEqual(200, response.StatusCode)
Assert.AreEqual(215, response.ContentLength)
)
Run Code Online (Sandbox Code Playgroud)