F# 测试¶
此文件使用 F# 特定内容扩展 common/testing.md。
测试框架¶
- 优先使用 xUnit 和 FsUnit.xUnit 以获得对 F# 友好的断言
- 使用 Unquote 进行基于引号的断言,并提供清晰的失败消息
- 使用 FsCheck.xUnit 进行基于属性的测试
- 使用 NSubstitute 或函数桩来模拟依赖
- 当集成测试需要真实基础设施时使用 Testcontainers
测试结构¶
- 在
tests/下镜像src/的结构 - 明确分离单元测试、集成测试和端到端测试的覆盖范围
- 以行为而非实现细节为测试命名
open Xunit
open Swensen.Unquote
[<Fact>]
let ``リクエストが有効な場合、PlaceOrder は成功を返す`` () =
let request = { CustomerId = "cust-123"; Items = [ validItem ] }
let result = OrderService.placeOrder request
test <@ Result.isOk result @>
[<Fact>]
let ``アイテムが空の場合、PlaceOrder はエラーを返す`` () =
let request = { CustomerId = "cust-123"; Items = [] }
let result = OrderService.placeOrder request
test <@ Result.isError result @>
使用 FsCheck 进行基于属性的测试¶
open FsCheck.Xunit
[<Property>]
let ``注文合計が負になることはない`` (items: OrderItem list) =
let total = Order.calculateTotal items
total >= 0m
ASP.NET Core 集成测试¶
- 使用
WebApplicationFactory<TEntryPoint>进行 API 集成覆盖 - 不要绕过中间件,而是通过 HTTP 测试认证、验证和序列化
覆盖率¶
- 目标行覆盖率达到 80% 以上
- 重点关注领域逻辑、验证、认证和失败路径的覆盖
- 如果可用,在 CI 中启用覆盖率收集并运行
dotnet test
本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 ev/ECC