我要使用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.
所以,我决定尝试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
---------------------------
The exception can be found here
发生了什么以及如何解决?(无需维护MySolution.nunit文件)
更多信息
MyNamespace.Administration
甚至不是包含测试的dll之一,这意味着nunit尝试加载它以查找要运行的测试失败。知道了这一点,我编辑了nunit-x86.exe
(MySolution.nunit)创建的文件,并删除了所有没有测试的dll。果然,测试工作(在gui和console中)。这对我来说是不可接受的,因为这意味着我必须保留另一个配置文件。 Nunit支持.sln文件应该避免这种情况。MyNamespace.Administration.dll/EXE
inside the nunit directories MyNamespace.Administration
(使用“添加程序集...”或“添加VS项目......”),则会失败。nunit-console-x86 somepath/bin/Debug/MyNamespace.Administration.dll
。答案 0 :(得分:5)
将我的回复转发给nunit-discuss:
加载VS解决方案的NUnit功能非常有限,旨在用于简单项目或作为创建NUnit项目文件的快捷方式 - 即加载解决方案并保存为NUnit项目,然后编辑xml文件被建造。由于解决方案文件格式不指示哪些文件是测试,因此NUnit会尝试加载每个项目以检查它是否包含任何测试。 (这与Visual Studio 2012及更高版本在使用测试资源管理器窗口时的功能相同,顺便说一句。)
正如您所建议的那样,我认为特定程序集无法加载,因为它具有一个级别的依赖性。加载VS解决方案文件或NUnit项目文件时,NUnit会将应用程序基础设置为包含解决方案或项目的目录。这就是NUnit项目文件升级的原因。
设计师在这种情况下的意图是你要创建一个NUnit项目文件。我认识到这有点不方便,因为它为您提供了另一个要维护的配置文件。我对在命令行或项目文件中使用globs的建议持开放态度。任何此类更改都可能会进入下一个主要升级NUnit 3.0。
答案 1 :(得分:3)
不幸的是,即使在nunit-discuss group上发帖后,我也无法找到解决此问题的正确方法。
nunit-discuss小组证实我的测试失败了,因为它的依赖性是一级的。
然而,我确实找到了可以接受的解决方案。由于直接调用.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
说Bad 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'
项目结构更短,更宽松。