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)
)
我正在 运行 进行一些 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)
)