将xUnit项目添加到Unity项目

问题描述

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

public class AScript : MonoBehavIoUr {}

此后,我关闭IDE和Unity。 Assembly-CSharp.csproj文件现在位于项目的根目录中。

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

[Fact]
public void Test1()
{
    Assert.True(true);
}

出于完整性考虑,我在测试项目中引用了Unity项目。在运行测试时(应该没问题),测试没有运行,因为它们没有定论。我在测试输出中找到了这些信息

最后的错误:没有这样的文件或目录

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

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

我也很好奇为什么Rider在将测试项目添加解决方案时会提出这个建议

enter image description here

我可以使用它,但是我不喜欢该解决方案,因此请解释这是否是唯一的方法,或者这是错误方法(我认为)

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

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


这是整个测试输出

TestProject1.UnitTest1.Test1

测试未运行

最后的错误:没有这样的文件或目录

---例外#1/2 [Win32Exception]消息=“没有这样的文件或目录” ExceptionPath = Root.InnerException ClassName = System.ComponentModel.Win32Exception HResult = E_FAIL = EFail = 80004005 源= System.Diagnostics.Process NativeErrorCode = 2 StackTraceString =“ at System.Diagnostics.Process.ForkAndExecProcess(字符串文件名, String [] argv,String [] envp,String cwd,布尔redirectStdin, 布尔redirectStdout,布尔Boolean redirectStderr,布尔 setCredentials,UInt32 userId,UInt32 groupId,UInt32 []组,Int32& stdinFd,Int32&stdoutFd,Int32&stderrFd,布尔值使用终端, 布尔throwOnNoExec) 在System.Diagnostics.Process.StartCore(processstartinfo startInfo) 在System.Diagnostics.Process.Start() 在JetBrains.ReSharper.UnitTestFramework.Processes.PreparedProcess.Start() 在JetBrains.ReSharper.UnitTestFramework.TestRunner.TestRunnerRunStrategy。 c.b__19_1(IPreparedProcess p) 在JetBrains.Util.Special.GeneralUtil.With [T](T控件,操作1 action) at JetBrains.ReSharper.UnitTestFramework.TestRunner.TestRunnerRunStrategy.StartTestRunner(IUnitTestRun run,ITestRunnerEnvironmentSpecifier environmentSpecifier,IUnitTestAgentCommunicationChannel channel) at JetBrains.ReSharper.UnitTestFramework.TestRunner.TestRunnerRunStrategy.Run(IUnitTestRun run) --- End of stack trace from prevIoUs location where exception was thrown --- at JetBrains.ReSharper.UnitTestFramework.Launch.UnitTestRun.StartCore(CancellationToken onCancel,CancellationToken onAbort) at JetBrains.ReSharper.UnitTestFramework.Launch.UnitTestRun.<>c.<StartCore>b__29_0(ExceptiondispatchInfo e) at JetBrains.Util.Special.GeneralUtil.WithNotNull[T](T item,Action 1 F)处 在JetBrains.ReSharper.UnitTestFramework.Launch.UnitTestRun.StartCore(CancellationToken onCancel,CancellationToken onAbort) 在JetBrains.ReSharper.UnitTestFramework.Launch.UnitTestRun.Start(CancellationToken onCancel,CancellationToken onAbort)”

---外部---

---例外#2/2 [LoggerException]消息=“没有这样的文件或目录” ExceptionPath =根ClassName = JetBrains.Util.LoggerException InnerException =“异常#1在 Root.InnerException” HResult = COR_E_APPLICATION = 80131600 StackTraceString =“ at JetBrains.Util.ILoggerEx.LogException(ILogger this,LoggingLevel 级别,异常异常,Exceptionorigin exceptionorigin,字符串 评论) 在JetBrains.Util.ILoggerEx.Error(ILogger this,Exception exception,Exceptionorigin origin,String comment)处 在JetBrains.ReSharper.UnitTestFramework.Launch.UnitTestRun.Start(CancellationToken onCancel,CancellationToken onAbort) 在System.Runtime.CompilerServices.AsyncmethodBuilderCore.Start [TStateMachine](TStateMachine& 状态机) 在JetBrains.ReSharper.UnitTestFramework.Launch.UnitTestRun.Start(CancellationToken onCancel,CancellationToken onAbort) 在JetBrains.ReSharper.UnitTestFramework.Launch.Stages.RunTestsstage。 c__displayClass5_0.b__0() 在System.Threading.Tasks.Task`1.InnerInvoke() 在System.Threading.ExecutionContext.RunFromThreadPooldispatchLoop(Thread threadPoolThread,ExecutionContext executeContext,ContextCallback 回调,对象状态) 在System.Threading.Tasks.Task.ExecuteWithThreadLocal(Task&currentTaskSlot,Thread threadPoolThread) 在System.Threading.Tasks.Task.ExecuteFromThreadPool(Thread threadPoolThread) 在System.Threading.ThreadPoolWorkQueue.dispatch()处”

解决方法

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

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

自从您提到您正在使用Entitas以来,您可以按照本指南进行设置

https://github.com/sschmid/Entitas-CSharp/wiki/How-to-setup-a-new-Github-project-with-Unity-and-tests#setting-up-tests