f# - F#- 如何在 F# 中使用 Assert.Multiple
问题描述
我正在运行一些 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)
)
推荐阅读
- c# - C# SQL 依赖检测自己的调用
- spring-boot - 尤里卡服务给出请求执行错误?
- java - java中的通配符和类型参数范围
- go - 如何在 go 中编写前/后流量挂钩函数?
- python - NumPy 等效于 pandas 日期时间访问器操作
- pandas - 表和 HDF5 python 包的问题
- python - Django:模型设计建议
- amazon-web-services - 为 AWS Data Lifecycle Manager 设置通知
- javascript - 更改 URL 参数时有条件地限制重定向
- php - eBay API 未根据 findItemsByCategoryRequest 搜索获取产品的完整详细信息