我创建了以下结构:
├── Assets
├── Scenes
├── Scripts
│ └── MyExample.cs
├── Tests
│ ├── MyExampleTest.cs
│ └── Tests.asmdef
现在,当我点击Run Run窗口中的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;
}
}
MyExample.cs
namespace abc
{
public class Example
{
}
}
答案 0 :(得分:29)
尝试使用内置的Test Runner UI来设置Test Assembly文件夹和第一个Test脚本。
使用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窗口中。
当我的程序集文件显式设置为仅包含“编辑器”平台时(根据我之前的示例),我的测试在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's documentation on assembly definition files)
答案 1 :(得分:1)
Lite,“零组件”,替代设置:
Assets
├── Scenes
├── Scripts
│ └── MyGameScript.cs
├── Editor
│ └── MyGameScriptTests.cs
Editor
目录中的所有脚本都可以引用 NUnit.Framework
命名空间,这些测试将显示在 Test Runner
窗口中。
它的主要优点是简单。我确定某处有缺点,但对于日常项目来说,这是一种祝福。