c# - 如何在 Unity 中设置单元测试并修复缺少的程序集引用错误?
问题描述
我创建了以下结构:
├── Assets
├── Scenes
├── Scripts
│ └── MyExample.cs
├── Tests
│ ├── MyExampleTest.cs
│ └── Tests.asmdef
现在,当我在 Unity 的 Test Runner 窗口中单击 Run All 时,出现以下错误:
The type or namespace name `MyExample' could not be found. Are you missing an assembly reference?
在 Visual Studio 中,我有两个项目:
Assembly-CSharp(包含 src)
测试(包含测试)
我在第二个项目中添加了 Assembly-CSharp 作为参考。Visual Studio 能够构建没有错误的解决方案。
有谁知道如何为 Unity 项目正确设置 UnitTest 回归?
这是 Tests.asmdef
{
"name": "Tests",
"optionalUnityReferences": [
"TestAssemblies"
]
}
MyExampleTest.cs
using UnityEngine;
using UnityEngine.TestTools;
using NUnit.Framework;
using System.Collections;
using abc;
public class MyExampleTest{
[Test]
public void NewTestScriptSimplePasses() {
// Use the Assert class to test conditions.
}
[UnityTest]
public IEnumerator NewTestScriptWithEnumeratorPasses() {
abc.Example m;
Assert.That(false);
yield return null;
}
}
我的例子.cs
namespace abc
{
public class Example
{
}
}
解决方案
尝试使用内置的 Test Runner UI 设置您的测试程序集文件夹和第一个测试脚本。
使用Window -> Test Runner -> EditMode -> "Create Test Assembly Folder"
,一旦导航到新的测试程序集文件夹,请使用Create Test Script in current folder
按钮。
特别是,Tests.asmdef
与默认设置(在 Unity 2018.1 中)相比,您缺少“编辑器”包含。
{
"name": "Tests",
"optionalUnityReferences": [
"TestAssemblies"
],
"includePlatforms": [
"Editor"
]
}
您不必为了设置测试而在 Visual Studio 项目中手动执行任何操作。
请注意,当我的程序集文件设置为“任何平台”时(如您的问题):
{
"name": "Tests",
"optionalUnityReferences": [
"TestAssemblies"
]
}
我的测试未显示在 Test Runner 窗口中。
当我的程序集文件明确设置为仅包含“编辑器”平台时(根据我之前的示例),我的测试会正确显示在“测试运行器”窗口中。
(这种行为对我来说似乎有点违反直觉。)
您还需要为您的脚本设置一个程序集定义。在您的Scripts
, 文件夹下,创建一个程序集定义文件MyScriptAssembly.asmdef
(使用 Unity 菜单Assets -> Create -> Assembly Definition
或手动):
{
"name": "MyScriptAssembly"
}
然后,确保您Tests.asmdef
参考您的脚本程序集:
{
"name": "Tests",
"references": [
"MyScriptAssembly"
],
"optionalUnityReferences": [
"TestAssemblies"
],
"includePlatforms": [
"Editor"
],
"excludePlatforms": [],
"allowUnsafeCode": false
}
您也可以在 Unity Editor 检查器窗口中进行设置。选择 .asmdef 文件时,请参阅检查器中的“参考”:
(有关详细信息,请参阅Unity 关于程序集定义文件的文档)
推荐阅读
- vb.net - INSERT... ON DUPLICATE KEY UPDATE.... 这是错误 .System.NullReferenceException:Object reference not set to an instance of an object
- python - 为什么这些 python 片段相互矛盾?
- c++ - 如何将入口点过程从“WinMain”更改为“main”或任何自定义函数?
- javascript - 无法使用 JavaScript 播放音频
- ios - 通过按下它来更改 UICollectionView 单元格内的标签
- python - 如何根据集合中匹配的元素数量增加变量
- javascript - TypeError:无法在 XMLHttpRequest.xhr.onreadystatechange 处读取 null 的属性“src”
- arrays - 如何按字母顺序对字符串数组进行排序并防止c中的突变
- c# - C# 无法连接到 SQL 数据库
- charts - 带有饼图的 Highchart 流体顶部/底部边距