尝试在Visual Studio中运行单元测试时收到以下错误消息:
NUnit failed to load w:\Repos\trading.tools\Trading.Tools.Test\bin\x64\Debug\Trading.Tools.Test.dll
我正在使用
奇怪的是,我有另一个项目设置方式与此项目相同,并且工作得很好。
我还下载了NUnit 3.4.1并安装了它。我跑的时候
nunit3-console.exe Trading.Tools.Test.dll
一切正常。 有什么想法我可以做什么?
非常感谢 康斯坦丁
编辑#1
以下是尝试运行所有测试时Visual Studio的完整控制台输出。
Test run will use DLL(s) built for framework Framework45 and platform X86. Following DLL(s) will not be part of run:
Trading.Tools.Test.dll, Trading.Tools.dll are built for Framework Framework45 and Platform X64.
Go to http://go.microsoft.com/fwlink/?LinkID=236877&clcid=0x409 for more details on managing these settings.
NUnit Adapter 3.4.0.0: Test discovery starting
NUnit failed to load w:\Repos\trading.tools\Trading.Tools.Test\bin\x64\Debug\Trading.Tools.Test.dll
Assembly contains no NUnit 3.0 tests: w:\Repos\trading.tools\Trading.Tools\bin\x64\Debug\Trading.Tools.dll
NUnit Adapter 3.4.0.0: Test discovery complete
正如您所看到的,NUnit非常明显需要x86版本,但我是为x64平台构建的。而且,如果我使用nunit3-console.exe
执行它,我的x64构建工作正常。
我在csproj
文件中看到的是:
<Reference Include="nunit.framework, Version=2.6.4.14350, Culture=neutral, PublicKeyToken=96d09a1eb7f44a77, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\packages\NUnit.3.4.1\lib\net45\nunit.framework.dll</HintPath>
</Reference>
这里奇怪的是它指定使用Version=2.6.4.14350
但引用了3.4.1 dll。
所以从这一点开始的下一个问题是如何让NUnit执行我的x64构建?有什么想法吗?
答案 0 :(得分:49)
我遇到了类似的问题,关键是Visual Studio中的 Test Runner 表明只会测试x86程序集。我假设它然后强制使用x86 NUnit跑步者。要更改此设置(至少在VS2015和VS2017中),请转到Test Settings
&gt; Default Processor Architecture
&gt; X64
&gt; Signatureview
。
答案 1 :(得分:3)
您还可以在runsettings文件中设置执行目标。然后,您必须选择该文件。这应该使解决方案更稳定。 仅设置此项的runsettings文件可能如下所示:
要启用它,请执行以下图所示:
当您从测试菜单(1)中选择它时,它将被添加为菜单中的所选菜单(2),然后重建将使测试显示在测试资源管理器(3)中
使用runsettings文件还有一个额外的好处,那就是如果你使用它,它将在TFS Build系统上正常运行。我已就此问题撰写了博客文章,请参阅http://hermit.no/how-to-control-the-selection-of-test-runner-in-tfsvsts-making-it-work-with-x86x64-selected-targets/
答案 2 :(得分:1)
在编写单元测试方法时,我碰巧遇到了这个错误。并注意到其中一个依赖的dll缺失加载的根本原因。在修改测试方法代码并尝试运行它之后,在输出(“测试”)窗口中显示了此错误(“NUnit未能加载.dll”)。更新了依赖dll的nuget包之后,nunit开始选择测试项目dll并执行测试用例。
答案 3 :(得分:1)
我无法执行我的测试,发现这是问题之一。事实证明,我的 TestFixture 是 内部 。只需将其切换为 public 就可以解决我的问题。
答案 4 :(得分:1)
尝试上述所有其他方法均未成功后,以下内容对我有用:
在我的情况下,.NET项目和解决方案位于已安装的驱动器上(我使用MacBook和Parallels进行.NET开发)。该挂载还包含NUnit试图从中读取“测试” DLL的/ bin / debug和/ bin / release位置。
解决方法是将解决方案/项目文件移动到Windows映像的C:驱动器。测试立即被发现。
显然,共享/挂载位置不符合要求。我不知道为什么,因为安装是永久的,并且Windows映像上的所有用户都可以读取/写入。我怀疑文件权限问题或运行NUnit发现逻辑的用户/进程无法以某种方式访问整个装载。
答案 5 :(得分:0)
今天我也遇到了这个问题(在基于 .NET Framework 4.8 的 NUnit 项目上)。我的解决方案是同时安装 Microsoft.NET.Test.Sdk 包。