我在Unity3d项目中有两个文件。一种是在编辑模式下运行的测试脚本。另一个是带有静态函数的单个类,我想从测试脚本中调用它。
这是我的测试脚本:
using UnityEngine;
using UnityEngine.TestTools;
using NUnit.Framework;
using System.Collections;
public class NewTestScript
{
[Test]
public void TestAnotherStaticFunction()
{
int a = NewBehaviourScript.FunctionUnderTest(1);
int b = 1;
// Use the Assert class to test conditions.
Assert.IsTrue(a == b);
}
}
这是我正在测试的功能:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class NewBehaviourScript : MonoBehaviour
{
/// <summary>
/// the stupidest function in the world,
/// used to verify tests.
/// </summary>
public static int FunctionUnderTest(int a)
{
return a;
}
}
这给了我Unity编译器的错误(我不在Unity之外构建):
资产/TestS/NewTestScript.cs(12,17):错误CS0103:名称“ NewBehaviourScript”在当前上下文中不存在
这些以编辑模式运行。
我尝试从被测函数和调用代码中添加和删除 SuperTestNameSpace 命名空间。
我尝试从统一生成的 .asmdef 文件中添加/删除文件,尽管这通常会导致其他编译错误。
我以前的单元测试经验主要是在Visual Studio或VSCode中进行的,并且我试图获得我的unity3d测试经验以与我先前的测试环境经验相匹配。
编辑模式测试中功能是否从根本上受到限制,还是我缺少一些愚蠢的东西?
有关装配的进一步说明。看来这里有两个程序集在起作用: Assembly-CSharp.dll 包含我正在测试的代码,而 TestS.dll 包含我的测试代码。我认为我的问题可以归结为:如何将TestS.dll程序集的引用添加到 Assembly-CSharp.dll 。我知道如何在Visual Studio中执行此操作(通过VS中的上下文菜单或直接编辑csproj文件),但是我看不到如何在Unity3d中执行此操作。我对csproj文件所做的任何编辑都经常被unity覆盖,并且当检查器中有一个“引用”部分(参见图片)时,我无法添加 Assembly-CSharp.dll 作为引用。
答案 0 :(得分:2)
好,我知道了。有两件事发生:
默认情况下,unity将脚本代码添加到名为 Assembly-CSharp.dll 的程序集中,并且由于未知原因,我的编辑模式测试代码未引用该程序集。我不确定这是Unity中的错误还是设计使然,但是显式创建和引用程序集定义已清除了一切。
答案 1 :(得分:1)
主要问题是当前您正在尝试致电
NewBehaviourScript(1);
不存在的构造函数...
代替方法
using SuperTestNameSpace;
//...
NewBehaviourScript.FunctionUnderTest(1);
或直接在调用中使用名称空间
SuperTestNameSpace.NewBehaviourScript.FunctionUnderTest(1);
还要确保文件名与类名完全匹配。因此,您的情况应该是
NewBehaviourScript.cs
请注意,.cs
不是由Unity在Project
视图中打印的,因此它应该显示NewBehaviourScript
。
为什么它不能与using SuperTestNameSpace;
一起编译?有什么错误吗?
如果有例外
资产/TestS/NewTestScript.cs(14,17):错误CS0103:名称'NewBehaviourScript'在当前上下文中不存在
仅在VisualStudio中显示,但是脚本在Unity中可以很好地编译,尤其是在添加新脚本之后,它有助于简单地关闭并重新启动VS。
在某些情况下,它还有助于关闭Unity和VS,删除Assets
和ProjectSettings
之外的所有文件和文件夹(如果受版本控制,则属于{{1 }},.git
,.gitignore
等),尤其是删除.gitattributes
,Library
文件夹以及所有.vs
和.csproj
文件。
然后再次打开Unity并重新编译所有内容。
答案 2 :(得分:0)
确保在编辑器文件夹中包含NewBehaviourScript类不是的文件。
移动“资源”(根)文件夹中的两个脚本,然后重试。