如何告诉nunit-console在Mono下使用4.0?

时间:2012-10-25 12:53:59

标签: c#-4.0 mono nunit

我在MonoDevelop下设置了一个简单的项目,可以从那里成功运行测试(*)。

当我从命令行尝试nunit-console.exe时,我得到了这个:

 .../mono2/bin/Debug$ nunit-console mono2.exe
 NUnit version 2.5.10.0
 ...
 Runtime Environment - 
   OS Version: Unix 2.6.32.44
  CLR Version: 2.0.50727.1433 ( 2.10.8.1 (Debian 2.10.8.1-1~dhx1~lucid1) )

 ProcessModel: Default    DomainUsage: Single
 Execution Runtime: Default
 Unhandled Exception:
 System.ArgumentException: NUnit components for version 4.0.30319 of the CLR are not installed
 ...

如果我遗漏了重要的事情,请告诉我。

nunit-gui也犯了同样的错误。 nunit-gui有一个从2.0切换到4.0的选项,但是当我尝试它再次给我同样的错误,所以不让我改变它。

更多细节:Ubuntu 10.04,使用http://badgerports.org/lucid.html存储库,因此Mono 2.10.8.1。

该项目根据MonoDevelop中的项目选项设置为使用“Mono / .NET 4.0”。

更多信息:

/ usr / bin / nunit-console包含:

#!/bin/sh

exec /usr/bin/cli /usr/lib/nunit/nunit-console.exe "$@"

/ usr / lib / nunit /目录包含:

   3073 2011-03-14 18:13 nunit.exe.config
   2598 2011-03-14 18:13 nunit-console.exe.config
  23040 2012-02-29 10:19 nunit-console-runner.dll
   4608 2012-02-29 10:19 nunit-console.exe*
  76288 2012-02-29 10:19 nunit.uiexception.dll
 259072 2012-02-29 10:19 nunit.uikit.dll
 183808 2012-02-29 10:19 nunit-gui-runner.dll
   4096 2012-02-29 10:19 nunit.exe*

nunit-console.exe.config包含:

<?xml version="1.0" encoding="utf-8"?>
<configuration>

  <runtime>
    <!-- We need this so test exceptions don't crash NUnit -->
    <legacyUnhandledExceptionPolicy enabled="1" />

    <!-- Look for addins in the addins directory for now -->
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <probing privatePath="lib;addins"/>
   </assemblyBinding>

   <!--
    The following <assemblyBinding> section allows running nunit under 
    .NET 1.0 by redirecting assemblies. The appliesTo attribute
    causes the section to be ignored except under .NET 1.0
    on a machine with only the .NET version 1.0 runtime installed.
    If application and its tests were built for .NET 1.1 you will
    also need to redirect system assemblies in the test config file,
    which controls loading of the tests.
   -->
   <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"
            appliesTo="v1.0.3705">

      <dependentAssembly> 
        <assemblyIdentity name="System" 
                          publicKeyToken="b77a5c561934e089" 
                          culture="neutral"/>
        <bindingRedirect  oldVersion="1.0.5000.0" 
                          newVersion="1.0.3300.0"/>
      </dependentAssembly>

      <dependentAssembly> 
        <assemblyIdentity name="System.Data" 
                          publicKeyToken="b77a5c561934e089" 
                          culture="neutral"/>
        <bindingRedirect  oldVersion="1.0.5000.0" 
                          newVersion="1.0.3300.0"/>
      </dependentAssembly>

      <dependentAssembly> 
        <assemblyIdentity name="System.Drawing" 
                          publicKeyToken="b03f5f7f11d50a3a" 
                          culture="neutral"/>
        <bindingRedirect  oldVersion="1.0.5000.0" 
                          newVersion="1.0.3300.0"/>
      </dependentAssembly>

      <dependentAssembly> 
        <assemblyIdentity name="System.Windows.Forms" 
                          publicKeyToken="b77a5c561934e089" 
                          culture="neutral"/>
        <bindingRedirect  oldVersion="1.0.5000.0" 
                          newVersion="1.0.3300.0"/>
      </dependentAssembly>

      <dependentAssembly> 
        <assemblyIdentity name="System.Xml" 
                          publicKeyToken="b77a5c561934e089" 
                          culture="neutral"/>
        <bindingRedirect  oldVersion="1.0.5000.0" 
                          newVersion="1.0.3300.0"/>
      </dependentAssembly>

    </assemblyBinding>

  </runtime>

</configuration>

*:当我尝试使用更具异国情调的Nunit属性时,我遇到了问题;这是我正在尝试解决的真正的问题,这导致了我上面描述的问题。但是上面使用的exe只有两个简单的测试,在MonoDevelop中可以正常工作。

2 个答案:

答案 0 :(得分:5)

诀窍是修改nunit-console(在Ubuntu 10.04上,使用badgerports,看起来像/usr/bin/cli /usr/lib/nunit/nunit-console.exe),告诉 / usr / bin / cli 使用.NET 4!

所以,当我执行此命令时:

/usr/bin/cli --runtime=v4.0 /usr/lib/nunit/nunit-console.exe mytest.exe

我得到了这个输出:

NUnit version 2.5.10.0
...
Runtime Environment - 
   OS Version: Unix 2.6.32.44
  CLR Version: 4.0.30319.1 ( 2.10.8.1 (Debian 2.10.8.1-1~dhx1~lucid1) )

ProcessModel: Default    DomainUsage: Single
Execution Runtime: Default
..
Tests run: 2, Errors: 0, Failures: 0, Inconclusive: 0, Time: 0.040103 seconds
  Not run: 0, Invalid: 0, Ignored: 0, Skipped: 0

如果您只打算使用NET 4,可以编辑/ usr / bin / nunit-console以始终设置它。

真正的问题是/ usr / bin / cli自动检测是选择NET 2而不是NET 4;但经过大量搜索后我发现无法控制自动检测过程。)


ASIDE :我强调 / usr / bin / cli 的原因是,只是告诉nunit-console要使用的框架失败(见下文)。即运行时版本必须提供给/ usr / bin / cli,而不是nunit-console!

/usr/bin/cli /usr/lib/nunit/nunit-console.exe -framework=v4.0 mytest.exe
NUnit version 2.5.10.0
...
Runtime Environment - 
   OS Version: Unix 2.6.32.44
  CLR Version: 2.0.50727.1433 ( 2.10.8.1 (Debian 2.10.8.1-1~dhx1~lucid1) )

ProcessModel: Default    DomainUsage: Single
Execution Runtime: v4.0
Unhandled Exception:
System.ArgumentException: NUnit components for version 4.0 of the CLR are not installed
Parameter name: targetRuntime
  at NUnit.Util.TestAgency.LaunchAgentProcess (NUnit.Core.RuntimeFramework targetRuntime, Boolean enableDebug) [0x00000] in <filename unknown>:0 
...

答案 1 :(得分:4)

使用nunit-console4而不是nunit-console。