C# 将xUnit项目添加到Unity项目时,单元测试是不确定的

C# 将xUnit项目添加到Unity项目时,单元测试是不确定的,c#,unity3d,xunit,rider,C#,Unity3d,Xunit,Rider,我创建了一个新的Unity项目,并通过在Assets文件夹中创建脚本来确保Assembly CSharp.csproj文件存在。我打开脚本并将其编辑为 public class AScript : MonoBehaviour {} 之后我关闭IDE和Unity。程序集CSharp.csproj文件现在存在于项目的根目录中 我再次启动IDE(没有Unity)并从.sln文件打开项目。我向解决方案中添加了一个新的xUnit项目,并将第一个测试修改为 [Fact] public void Test1

我创建了一个新的Unity项目,并通过在Assets文件夹中创建脚本来确保
Assembly CSharp.csproj
文件存在。我打开脚本并将其编辑为

public class AScript : MonoBehaviour {}
之后我关闭IDE和Unity。
程序集CSharp.csproj
文件现在存在于项目的根目录中

我再次启动IDE(没有Unity)并从.sln文件打开项目。我向解决方案中添加了一个新的xUnit项目,并将第一个测试修改为

[Fact]
public void Test1()
{
    Assert.True(true);
}
为了完整起见,我在测试项目中引用了Unity项目。当运行测试时(应该可以),测试没有运行,因为它们是不确定的。我在测试输出中找到了这些信息

最后一个运行程序错误:没有这样的文件或目录

下面我将发布整个测试输出。有人知道如何将单元测试项目添加到Unity项目中吗?如果你需要更多信息,请告诉我

我不想使用Unity测试框架,因为我正在使用并且不想依赖引擎。我只想在外面测试我的纯C代码

我也很好奇为什么Rider在将测试项目添加到解决方案时会想到这个问题

我让它工作了,但我不喜欢这个解决方案,所以请解释这是唯一的方法还是错误的(我认为)

当仅使用该测试项目创建一个全新的解决方案时,单元测试将正确运行。现在我可以通过“添加现有项目”添加现有的Unity项目。引用Unity项目也很好

是的,这是可行的,但现在我的存储库中有两个解决方案?为什么我必须分开测试项目?为什么我不能将单元测试项目添加到Unity的解决方案文件中


这是整个测试输出

TestProject1.UnitTest1.Test1

测试未运行

最后一个运行程序错误:没有这样的文件或目录

---异常#1/2[Win32Exception]Message=“没有这样的文件或目录”ExceptionPath=Root.InnerException ClassName= System.ComponentModel.Win32异常HResult=E_FAIL=EFail=80004005 Source=System.Diagnostics.Process NativeErrorCode=2 StackTraceString=“at System.Diagnostics.Process.ForkAndExecProcess(字符串文件名, 字符串[]argv,字符串[]envp,字符串cwd,布尔重定向stdin, 布尔重定向标准输出,布尔重定向标准输出,布尔 setCredentials,UInt32用户ID,UInt32组ID,UInt32[]组,Int32& stdinFd、Int32和stdoutFd、Int32和stderrFd、布尔usesTerminal、, 布尔throwOnNoExec) 在System.Diagnostics.Process.StartCore(ProcessStartInfo-startInfo) 在System.Diagnostics.Process.Start()中 在JetBrains.ReSharper.UnitTestFramework.Processs.PreparedProcess.Start()中 在JetBrains.ReSharper.UnitTestFramework.TestRunner.TestRunnerRunStrategy.c.b_u19_u1(IPreparedProcess (p) 在JetBrains.ReSharper.UnitTestFramework.TestRunner.TestRunnerRunStrategy.StartTestRunner(IUnitTestRun,ITestRunnerEnvironmentSpecifier环境说明符,IUnitTestAgentCommunicationChannel通道)的JetBrains.Util.Special.GeneralUtil.With[T](T控件,Action
1 Action)在JetBrains.ReSharper.UnitTestFramework.TestRunner.TestRunnerRunStrategy.Run(IUnitTestRun运行)----从引发异常的前一个位置开始的堆栈结束跟踪--在JetBrains.ReSharper.UnitTestFramework.Launch.UnitTestRun.StartCore(CancellationToken onCancel,CancellationToken OnBort)位于JetBrains.ReSharper.UnitTestFramework.Launch.UnitTestRun.c.b_uu29_u0(例外DispatchInfo e),位于JetBrains.Util.Special.GeneralUtil.WithNotNull[T](T项,操作
1f) 在JetBrains.ReSharper.UnitTestFramework.Launch.UnitTestRun.StartCore(CancellationToken onCancel、CancellationToken(OnBort) 在JetBrains.ReSharper.UnitTestFramework.Launch.UnitTestRun.Start(CancellationToken onCancel,取消标记OnBort“

---外---

---异常#2/2[LoggerException]Message=“没有这样的文件或目录”异常路径=根类名称= JetBrains.Util.LoggerException InnerException=“Exception#1 at Root.InnerException“HResult=COR_E_APPLICATION=8013600 StackTraceString=“at 日志异常(ILogger this,LoggingLevel 级别,异常异常,异常源代码,异常源代码,字符串 (评论) 在JetBrains.Util.ILoggerEx.Error处(ILogger this、Exception Exception、ExceptionOrigin、字符串注释) 在JetBrains.ReSharper.UnitTestFramework.Launch.UnitTestRun.Start(CancellationToken onCancel、CancellationToken(OnBort) 在System.Runtime.CompilerServices.AsyncMethodBuilderCore.Start[TStateMachine](TStateMachine& 状态机) 在JetBrains.ReSharper.UnitTestFramework.Launch.UnitTestRun.Start(CancellationToken onCancel、CancellationToken(OnBort) 在JetBrains.ReSharper.UnitTestFramework.Launch.Stages.RunTestsStage.c__显示类5_0.b__0() 在System.Threading.Tasks.Task`1.InnerInvoke()中 在System.Threading.ExecutionContext.RunFromThreadPoolDispatchLoop(线程 threadPoolThread,ExecutionContext ExecutionContext,ContextCallback 回调(对象状态) 位于System.Threading.Tasks.Task.ExecuteWithThreadLocal(Task¤tTaskSlot,threadPoolThread) 位于System.Threading.Tasks.Task.ExecuteFromThreadPool(线程线程池线程) 位于System.Threading.ThreadPoolWorkQueue.Dispatch()


不幸的是,您无法操作csproj或sln文件,因为Unity将在下次编译后丢弃它们

只需在Unity项目旁边创建一个新的测试项目即可。将Unity项目作为现有项目添加到测试解决方案中

因为您提到您正在使用Entitas,所以可以按照本指南设置测试