在使用MonoDevelop的OSX上,从终端/命令行运行NUnit测试

时间:2012-09-12 17:26:00

标签: mono nunit monodevelop

鉴于我在OSX上的MonoDevelop(MD)(3.0.4.6)中创建了一个名为TryTesting的C#NUnit测试库,我应该如何从终端/命令行运行这些测试(以便我可以添加它们是自动构建的吗?

我知道通用公式是:

nunit-console .../TryTesting/bin/Debug/TryTesting.dll

mono nunit-console.exe .../TryTesting/bin/Debug/TryTesting.dll

但是,考虑到安装MonoDevelop时创建的环境,仅此一点是不够的。

我得到以下输出&错误:

NUnit version 2.4.8
Copyright (C) 2002-2007 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: Unix 12.1.0.0
CLR Version: 2.0.50727.1433 ( 2.10.9 (tarball Mon May  7 20:25:51 EDT 2012) )

Missing method .ctor in assembly /private/var/folders/r6/wqmfjz8142z0z9vcg_7k9y140000gn/T/nunit20/ShadowCopyCache/3688_634830482326369170/Tests/assembly/shadow/52c5f76b/6c545c94_3e91abff_00000001/TryTesting.dll, type NUnit.Framework.TestFixtureAttribute
Can't find custom attr constructor image: /private/var/folders/r6/wqmfjz8142z0z9vcg_7k9y140000gn/T/nunit20/ShadowCopyCache/3688_634830482326369170/Tests/assembly/shadow/52c5f76b/6c545c94_3e91abff_00000001/TryTesting.dll mtoken: 0x0a000003
Could not load file or assembly 'nunit.framework, Version=2.6.0.12051, Culture=neutral, PublicKeyToken=96d09a1eb7f44a77' or one of its dependencies.

经过实验,似乎这个问题是由/ usr / bin和MD之间不匹配的nunit版本引起的。如果我下载最新的NUnit二进制文件并将项目中的nunit.framework引用替换为指向下载的副本,那么我可以使用下载的nunit-console.exe运行它。

所以,也许问题是:

  • 我应该删除对nunit.framework的自动引用,并在源代码树中包含我自己的NUnit分发吗?
  • 或者,MonoDevelop是否有我应该调用的nunit-console的匹配版本?

3 个答案:

答案 0 :(得分:4)

在跨多个环境运行单元测试的经验之后,我建议不要引用MonoDevelop(或Xamarin Studio)附带的nunit.framework。如果您只在该IDE中运行测试,则可以。但是,如果从命令行,不同的环境或构建框运行测试,那么您应该可以控制您的NUnit版本。

因此,如果您从“新建项目”对话框中创建新的NUnit库,则应删除提供的nunit.framework引用并将其替换为您自己的引用。

另请注意,NUnit测试运行程序对程序集版本非常敏感。因此,您应该将所有NUnit二进制文件保存在源树中。 (NUnit-2.6.1 / bin的重量为7 MB)

还值得注意的是,还有其他方法可以运行测试,例如NAnt <nunit2> Task,它对NUnit版本很敏感。

因此,将NUnit 2.6.1 *下载到我的解决方案目录下的packages目录中,命令将是:

mono packages/NUnit-2.6.1/bin/nunit-console.exe TryTesting/bin/Debug/TryTesting.dll

*脚注:由于NotImplementedException,我无法使用NUnit 2.6.2。

答案 1 :(得分:2)

我也遇到了这个问题。然后我升级NUnit Dll的版本。最后,我可以使用它。 请参考以下链接: http://nunit.org/?p=download

感谢。

答案 2 :(得分:0)

我遇到了类似的问题。

我删除了显式引用(.dll),我通过Nuget包安装了NUnit。

适合我。