如何在Unity中配置单元测试并修复程序集引用缺失错误?
解决Unity Test Runner找不到
MyExample类的问题 我之前也踩过这个Unity测试程序集引用的坑,给你几个针对性的排查和解决步骤:
1. 优先通过Tests.asmdef配置程序集引用
Unity的程序集依赖是通过.asmdef文件管理的,你在Visual Studio里手动添加的引用经常会被Unity自动覆盖,所以得从根源上配置:
- 在Project窗口里选中
Tests.asmdef文件 - 在Inspector面板的References列表中,点击
+号,找到并添加Assembly-CSharp - 保存设置,Unity会自动重新生成项目文件
2. 检查命名空间是否匹配
如果MyExample.cs里定义了命名空间(比如namespace MyGame.Scripts;),那你的测试类MyExampleTest.cs必须引用这个命名空间,不然会找不到类型:
using MyGame.Scripts; // 必须加上这个,和MyExample的命名空间对应 using NUnit.Framework; public class MyExampleTest { // 测试代码... }
3. 确认MyExample.cs属于Assembly-CSharp程序集
默认情况下,Assets下所有没有自己.asmdef文件的脚本都会归到Assembly-CSharp里,但如果你的Scripts文件夹有自己的.asmdef(比如Scripts.asmdef),那MyExample.cs就属于那个自定义程序集了,这时候你需要在Tests.asmdef的References里添加那个自定义程序集,而不是Assembly-CSharp。
4. 清理Unity缓存并重新生成项目
有时候Unity的程序集缓存会出问题,试试这个万能修复法:
- 关闭Visual Studio
- 在项目根目录删除
Library文件夹(放心,Unity会重新生成这个文件夹) - 重新打开Unity,等待它完成项目导入和程序集生成
- 再打开Visual Studio,检查引用是否正常,然后重新运行测试
5. 检查测试类的范围
确保MyExampleTest.cs确实被Tests.asmdef包含:
- 打开
Tests.asmdef,在Inspector的Include Platforms里确认没有排除测试相关的平台(比如Editor) - 确认
MyExampleTest.cs没有被放在Tests.asmdef的Exclude Folders列表里
内容的提问来源于stack exchange,提问作者HAL9000




