使用MySolution.sln,nunit-console"无法加载文件或程序集"

Joã*_*ela 5 nunit nunit-console

我将用于nunit-console在我的解决方案中运行所有测试.

我这样做了:

c:\some\path>nunit-console-x86.exe MySolution.sln
NUnit-Console version 2.6.2.12296
Copyright (C) 2002-2012 Charlie Poole.
Copyright (C) 2002-2004 James W. Newkirk, Michael C. Two, Alexei A. Vorontsov.
Copyright (C) 2000-2002 Philip Craig.
All Rights Reserved.

Runtime Environment -
   OS Version: Microsoft Windows NT 6.1.7601 Service Pack 1
  CLR Version: 2.0.50727.5466 ( Net 3.5 )

ProcessModel: Default    DomainUsage: Default
Execution Runtime: net-3.5
Could not load file or assembly 'MyNamespace.Administration, Version=0.0.0.1, Culture=neutral, PublicKeyToken=null' or one of its dependencies. The system cannot find the file specified.
Run Code Online (Sandbox Code Playgroud)

所以,我决定尝试一下nunit-x86.exe,File > Open Project > MySolution.sln并得到了这个:

---------------------------
NUnit
---------------------------
Test load failed!

System.IO.FileNotFoundException : Could not load file or assembly 
'MyNamespace.Administration, Version=0.0.0.1, Culture=neutral, 
PublicKeyToken=null' or one of its dependencies. The system cannot 
find the file specified.

For further information, use the Exception Details menu item.
---------------------------
OK   
---------------------------
Run Code Online (Sandbox Code Playgroud)

例外情况可以在这里找到

发生了什么,我该如何解决?(无需维护MySolution.nunit文件)

更多信息

  • MyNamespace.Administration甚至不是包含测试的dll之一,这意味着nunit无法尝试加载它以查找要运行的测试.知道了这一点,我编辑了nunit-x86.exe(MySolution.nunit)创建的文件并删除了所有没有测试的dll.果然,测试工作(在gui和console中).这对我来说是不可接受的,因为这意味着我必须保留另一个配置文件.Nunit支持.sln文件应该避免这种情况.
  • 我的测试使用TestDriven.Net运行良好(但我真的需要使用nunit-console运行它们)
  • 我看过这个答案,但我无法理解融合日志查看器所说的内容.发布该日志会有帮助吗?装配绑定日志查看器,列出正在创建的3个文件:
    • nunit-agent-x86.exe,这个似乎试图在nunit目录中找到MyNamespace.Administration.dll/EXE
    • Tests_24398275 x2 - 一个在我的项目文件夹中寻找nunit.core,另一个在我的项目文件夹中寻找unit.core.interfaces.我很少关注这两个因为它们也出现在我手动编辑的.nunit项目中.
  • (per andreister comment)问题似乎与项目/程序集本身有关,而不是创建方法.如果我创建一个.nunit项目并尝试添加MyNamespace.Administration它(使用"添加程序集......"或"添加VS项目......"),它就会失败.
  • nunit-console-x86 somepath/bin/Debug/MyNamespace.Administration.dll直接打电话.

Cha*_*lie 5

将我的回复转发给nunit-discuss:

加载VS解决方案的NUnit功能非常有限,旨在用于简单项目或作为创建NUnit项目文件的快速方法 - 即加载解决方案并保存为NUnit项目,然后编辑创建的xml文件.由于解决方案文件格式不指示哪些文件是测试,NUnit会尝试加载每个项目以检查它是否包含任何测试.(这与使用测试资源管理器窗口时,Visual Studio 2012及更高版本的功能相同,顺便说一下.)

正如您所建议的那样,我认为特定程序集无法加载,因为它具有一个级别的依赖性.加载VS解决方案文件或NUnit项目文件时,NUnit会将应用程序基础设置为包含解决方案或项目的目录.这就是NUnit项目文件升级的原因.

设计人员在这种情况下的意图是您将创建一个NUnit项目文件.我认识到这有点不方便,因为它为您提供了另一个要维护的配置文件.我对在命令行或项目文件中使用globs的建议持开放态度.任何此类更改都可能会进入下一个主要升级NUnit 3.0.


Joã*_*ela 3

不幸的是,即使在nunit 讨论组上发帖后,我也无法找到解决此问题的正确方法。

nunit-discuss 小组确认我的测试失败是因为存在上一级的依赖项。

不过我确实找到了一个可以接受的解决方法。

因为.dll直接调用 s 没有同样的问题。我可以用 glob 来做到这一点,但我在 Windows 上......但我安装了 git bash。

利用我有些严格的项目结构和命名约定,我设法做到了这一点:

"C:\Program Files (x86)\Git\bin\bash.exe" -c 'nunit-console-x86.exe //framework=net-4.5 //xml:nunitresults.xml MysolutionFolder/Tests/*/bin/Debug/*.Tests.dll'
Run Code Online (Sandbox Code Playgroud)

请注意,我利用了我的命名约定。为了减少参数数量,这样做非常重要。

当我nunit-console-x86 MysolutionFolder/*/*/bin/Debug/*.dll这样做时,我从说MysolutionFolder/Tests/*/bin/Debug/*.Tests.dll中得到了一个错误。此外,如果我只提供正确的文件,速度会更快。nunit-console-x86Bad file number

如果您有更新版本的 bash(我认为是 4.0+),您可以使用以下命令(注意 的使用**):

"C:\Program Files (x86)\Git\bin\bash.exe" -c 'nunit-console-x86.exe //framework=net-4.5 //xml:nunitresults.xml MysolutionFolder/**/bin/Debug/*.Tests.dll'
Run Code Online (Sandbox Code Playgroud)

哪个更短并且对项目结构更宽松。