首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何告诉nunit-控制台在Mono下使用4.0?

如何告诉nunit-控制台在Mono下使用4.0?
EN

Stack Overflow用户
提问于 2012-10-25 12:53:59
回答 2查看 3.2K关注 0票数 4

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

当我从命令行尝试nunit-trace.exe时,我得到以下信息:

代码语言:javascript
复制
 .../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,但是当我尝试时,它又给了我同样的错误,所以不允许我更改它。

更多细节:Ubuntu10.04,使用http://badgerports.org/lucid.html存储库,所以Mono2.10.8.1。

根据MonoDevelop中的project,项目被设置为使用"Mono/.NET 4.0“。

更多信息:

/usr/bin/nunit-控制台包含以下内容:

代码语言:javascript
复制
#!/bin/sh

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

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

代码语言:javascript
复制
   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-控制台.exe.config包含:

代码语言:javascript
复制
<?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中工作得很好。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-11-01 02:46:47

诀窍是修改nunit-控制台(在Ubuntu10.04上使用badgerports,类似于/usr/bin/cli /usr/lib/nunit/nunit-console.exe),告诉/usr/bin/cli使用.NET 4!

所以,当我执行这个命令时:

代码语言:javascript
复制
/usr/bin/cli --runtime=v4.0 /usr/lib/nunit/nunit-console.exe mytest.exe

我得到了这个输出:

代码语言:javascript
复制
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

如果您只打算使用Net4,您可以编辑/usr/bin/nunit-控制台来始终设置它。

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

撇开:我强调/usr/bin/cli的原因是,仅仅告诉nunit-控制台框架使用失败(参见下面)。也就是说,运行时版本必须提供给/usr/bin/cli,而不是nunit-控制台!

代码语言:javascript
复制
/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 
...
票数 5
EN

Stack Overflow用户

发布于 2012-10-25 13:21:59

使用nunit-控制台4而不是nunit-控制台。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13069078

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档