nunit控制台“;无法加载文件或程序集“;使用MySolution.sln

nunit控制台“;无法加载文件或程序集“;使用MySolution.sln,nunit,nunit-console,Nunit,Nunit Console,我将使用nunit控制台运行解决方案中的所有测试 我这样做: 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)

我将使用
nunit控制台
运行解决方案中的所有测试

我这样做:

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.
因此,我决定尝试
nunit-x86.exe
我做了
文件>打开项目>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   
---------------------------

发生了什么以及如何修复它?(无需维护MySolution.nunit文件)

更多信息

  • MyNamespace.Administration
    甚至不是包含测试的DLL之一,这意味着nunit无法加载它以查找要运行的测试。知道了这一点,我编辑了由
    nunit-x86.exe
    (MySolution.nunit)创建的文件,并删除了所有没有测试的DLL。果然,测试工作正常(在gui和控制台中)。这对我来说是不可接受的,因为这意味着我必须保留另一个配置文件。支持.sln文件的Nunit应该避免这种情况
  • 我的测试使用TestDriven.Net运行良好(但我确实需要使用nunit控制台运行它们)
  • 我已经看过了,但我无法理解fusion日志查看器所说的内容。张贴日志会有帮助吗?程序集绑定日志查看器,列出正在创建的3个文件:
    • nunit-agent-x86.exe,这一个似乎正在试图找到
    • 测试_24398275 x2-一个在我的项目文件夹中查找nunit.core,另一个在我的项目文件夹中查找unit.core.interfaces。我很少注意这两个,因为它们也出现在我手动编辑的.nunit项目中)
  • (根据andreister的评论)问题似乎在于项目/程序集本身,而不是创建方法。如果我创建一个.nunit项目,并尝试向其中添加
    MyNamespace.Administration
    (使用“添加程序集…”或“添加VS项目…”),则会失败
  • 直接调用
    nunit-console-x86 somepath/bin/Debug/MyNamespace.Administration.dll
不幸的是,即使在上了帖子之后,我也无法找到解决此问题的正确方法

nunit讨论小组确认我的测试失败是因为我的依赖性比我高一级

不过,我确实找到了一份可以接受的工作

因为直接调用
.dll
s没有同样的问题。 我可以用globs做这个,但我在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'
请注意,我利用了我的命名约定。这对于减少参数数量非常重要

当我使用
nunit-console-x86 MysolutionFolder/*/*/*/bin/Debug/*.dll而不是
MysolutionFolder/Tests/*/bin/Debug/*.Tests.dll时,我从
nunit-console-x86
中得到一个错误,说
文件号错误
。 此外,如果我只提供正确的文件,速度会更快

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


在项目结构上更简短、更宽松。

将我的回复转发给nunit讨论:

加载VS解决方案的NUnit功能实际上相当有限,用于处理简单的项目,或者作为创建NUnit项目文件的快速方法—即加载解决方案并另存为NUnit项目,然后编辑创建的xml文件。由于解决方案文件格式没有指明哪些文件是测试,NUnit尝试加载每个项目以检查它是否包含任何测试。(顺便说一句,这与Visual Studio 2012及更高版本在使用测试资源管理器窗口时所做的相同。)

正如您所建议的,我认为特定的程序集无法加载,因为它具有一个更高级别的依赖项。加载VS解决方案文件或NUnit项目文件时,NUnit会将应用程序库设置为包含解决方案或项目的目录。这就是NUnit项目文件向上一级运行的原因


在这种情况下,设计者的意图是创建NUnit项目文件。我认识到这有点不方便,因为它给您提供了另一个要维护的配置文件。我愿意接受关于在命令行或项目文件中使用globs的建议。任何此类更改都可能会进入下一次主要升级NUnit 3.0。

显然,
MyNamespace.Administration.dll
包含测试使用的代码。你确定你没有忘记,例如,在引用项目时放置
CopyLocal=True
?它被测试项目(dll)引用,但当我使用MySolution.nunit时,该项目可以工作,这让我相信它确实无法加载该项目,只是为了看看它是否有测试(我假设它打开项目以查看哪些项目有测试)。将该项目显式地添加到
.nunit
中,看看它是否会失败。通常,对于非测试项目,nunit只报告它没有测试。@andreister更新了问题确保.NET版本正常?您没有将.NET4程序集馈送到旧的nunit或其他程序中?可能尝试干净的生成。并尝试删除依赖项从
Administration.dll
,然后开始逐个添加它们,看看这是否会产生影响。从个人角度来说,一个额外的命令参数可以指示测试应该在每个项目的根目录下运行,这会很好。对于有几十个项目的解决方案,.sln文件的使用非常方便,但仍然应该有可以通过某种方式来隔离garanty配置文件和依赖项。
"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'