我想稍后用C#编写需要在Unity3D内部运行的脚本的单元测试。我的C#脚本位于Unity项目的“资产/脚本”文件夹中。
我在 Mac OS X 10.14.4版下将 Unity版本2019.1.0f2 与 Visual Studio Community for Mac V8.0.5(build 9)一起使用。
Unity有一个我使用过的测试运行器窗口:Window > General > Test runner
。在该测试运行器窗口中,我单击了“播放模式”和“创建播放模式测试程序集文件夹”。 Unity为我创建了一个名为“ Tests”的文件夹,应该在其中放置测试。到目前为止,一切都很好。
现在这是问题所在:
我的测试代码无法看到该测试文件夹的父文件夹中的被测类!
这是文件夹层次结构:
Assets
Scripts
MyFirstScript.cs
Tests
MyTestScript.cs
Tests.asmdef
当我双击MyTestScript.cs时,Visual Studio将打开解决方案,并且源文件将确定。现在,我正在尝试写
var x = new MyFirstScript();
并且编译器抱怨“找不到类型或名称空间名称'MyFirstScript'”。
似乎“脚本”文件夹中的类在“测试”文件夹中的类内部是完全未知的。
这是MyFirstScript.cs:
using UnityEngine;
public class MyFirstScript : MonoBehaviour
{
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
}
}
这是MyTestScript.cs:
using System.Collections;
using System.Collections.Generic;
using NUnit.Framework;
using UnityEngine;
using UnityEngine.TestTools;
namespace Tests
{
public class MyTestScript
{
// A Test behaves as an ordinary method
[Test]
public void MyTestScriptSimplePasses()
{
var x = new MyFirstScript(); // problem occurs HERE!
// Use the Assert class to test conditions
}
// A UnityTest behaves like a coroutine in Play Mode. In Edit Mode you can use
// `yield return null;` to skip a frame.
[UnityTest]
public IEnumerator MyTestScriptWithEnumeratorPasses()
{
// Use the Assert class to test conditions.
// Use yield to skip a frame.
yield return null;
}
}
}
我希望我可以在测试代码(MyTestScript)中使用类MyFirstScript。我该怎么办?
答案 0 :(得分:1)
查看this manual page的MonoBehaviourTest部分。
请注意,对于Unity,在MonoBehaviour派生的对象上调用“ new”几乎从来不是一个好主意。您几乎总是想通过在GameObject上调用AddComponent()来实例化它。