用途:为 Unity 项目生成生产级测试。分析目标代码,判断最优测试类型(EditMode 或 PlayMode),将 MonoBehaviour 中可测试逻辑抽取为纯 C#,并生成对应的 NUnit 测试。
主要能力:按决策树区分 EditMode 与 PlayMode;对耦合在 MonoBehaviour 中的逻辑执行“Extract to Testable”重构;生成测试模板;通过 Unity Test Runner 运行验证;支持代码覆盖率查看。
使用方式:先分析目标代码的输入、输出、副作用与 Unity 依赖;判断测试类型;必要时抽取纯逻辑;配置 Assembly Definitions(EditMode 与 PlayMode 各一个 .asmdef,引用运行时程序集并设置 UNITY_INCLUDE_TESTS);按命名约定 MethodName_Condition_ExpectedResult 编写测试;在 Window > General > Test Runner 中运行。
适用场景:纯逻辑(数学、状态、数据)用 EditMode;依赖 MonoBehaviour 生命周期、协程或 Awaitable 用 PlayMode;ScriptableObject 用 EditMode;多系统集成用 PlayMode 集成测试。
限制与规则:Unity 不内置 mocking 框架,需用接口加手写测试替身;EditMode 测试禁止文件系统或网络访问;禁止 Thread.Sleep,改用 yield return null 或 await;浮点断言需带容差;测试须独立且幂等;测试不得放入主程序集。
前置条件:Unity Test Framework(com.unity.test-framework,默认包含)、NUnit、每个测试目录一个 .asmdef、Assets/ 下 Tests/ 结构。
相关技能:/unity-code-gen、/unity-refactor、/unity-debug、/perf-audit。
常见问题:测试未被检测多为 .asmdef 配置问题;PlayMode 过慢可精简场景;异步超时需处理 CancellationToken;Start 中空引用需在 AddComponent 后 yield 一帧;EditMode 通过但构建失败需分离 #if UNITY_EDITOR 代码。