4

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リポジトリを使用しているため、Mono2.10.8.1。

プロジェクトは、MonoDevelopのプロジェクトオプションに従って「Mono/.NET4.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つの簡単なテストを含むものです。

4

2 に答える 2

5

秘訣は、nunit-console を変更することです (Ubuntu 10.04 では、budgerports を使用すると のよう/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 4 ではなく NET 2 を選択していることです。しかし、多くの検索の後、その自動検出プロセスを制御する方法が見つかりませんでした。)


ASIDE : /usr/bin/cliを強調した理由は、nunit-console にフレームワークを使用するように指示するだけでは失敗するためです (以下を参照)。つまり、ランタイム バージョンは、nunit-console ではなく、/usr/bin/cli に指定する必要があります。

/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 
...
于 2012-11-01T02:46:47.307 に答える
4

nunit-console の代わりに nunit-console4 を使用します。

于 2012-10-25T13:21:59.940 に答える