SuperAPI AI 工具集

akka-net-testing-patterns

测试与质量

查看项目

更新于 10-15 10:49

技能介绍

用途

该技能面向使用 Akka.NET 开发 .NET 应用的场景,帮助开发者编写 actor 的单元测试与集成测试。它推荐使用 Akka.Hosting.TestKit 模式,适用于现代 .NET 应用(Akka.NET v1.5+),尤其是使用 Microsoft.Extensions.DependencyInjection、Akka.Hosting、ASP.NET Core、Worker Services 或 .NET Aspire 的项目。

主要能力

技能覆盖以下测试需求:为 Akka.NET actor 编写单元测试;测试使用事件溯源的持久化 actor;验证 actor 之间的交互与消息流;测试 actor 的监督与生命周期;在 actor 测试中模拟外部依赖;在本地测试集群分片行为;验证 actor 状态恢复与持久化。

使用方式

技能建议继承 Akka.Hosting.TestKit.TestKit 基类,重写 ConfigureServices() 以用假实现替换真实服务,重写 ConfigureAkka() 以使用与生产相同的扩展方法配置 actor,并通过 ActorRegistry 以类型安全方式获取 actor 引用。测试项目需要引入 Akka.Hosting.TestKit、xUnit、Microsoft.NET.Test.Sdk、FluentAssertions、Akka.Persistence.Hosting,以及测试集群分片时的 Akka.Cluster.Hosting。技能特别提示:由于 TestKit 会启动真实 IHost 实例并默认启用配置文件监视,在 Linux 上运行大量测试可能耗尽 inotify 文件描述符限制,因此建议添加 TestEnvironmentInitializer 类,通过 [ModuleInitializer] 设置环境变量 DOTNET_HOSTBUILDER__RELOADCONFIGONCHANGE 为 false。

测试模式

技能列出八种模式:基础 actor 测试(注入假服务并注册 actor);使用 TestProbe 验证 actor 向依赖发送消息;自动响应 TestProbe 以避免 Ask 超时;测试持久化 actor(使用内存日志与快照存储,通过 PoisonPill 杀死 actor 后查询以验证恢复);复用生产配置(使用相同扩展方法,仅切换 AkkaExecutionMode);本地测试集群分片(使用 AkkaExecutionMode.LocalTest 与 GenericChildPerEntityParent);使用 AwaitAssertAsync 处理异步操作以避免测试不稳定;基于场景的端到端集成测试。

适用场景与限制

该技能主要面向使用 Akka.Hosting 的现代 .NET 项目;对于 Akka.NET 核心库开发、无 Microsoft.Extensions 的环境或使用手动 Props 的遗留代码库,技能建议改用传统 Akka.TestKit,并参考 anti-patterns-and-reference.md。技能强调使用假实现而非 mock、一次只测试一个 actor、保持测试快速(使用内存持久化而非真实数据库)等最佳实践。关于具体收费、价格或平台支持等信息,资料中暂未提供。