2011-11-21 20 views
6

私は、stackoverflowに記載されているnunitとvisual studioの問題のいくつかを閲覧しましたが、私のケースが合っているスレッドは見つかりませんでした。NUnit C#他のDLLを参照しているプロジェクトをテストする

私が書いたコードをテストするためにNUnitを使用しています。テストプロジェクトの* .csprojファイルをNUnit GUIツールにロードしています。

私は問題を理解しましたが、これまでのところ解決策はありませんでした。 私がやっていること:

他の2つのプロジェクトは、両方ともdllプロジェクトです。 これは、TestProject(DLL)、SettingsManager(DLL)、DatabaseInterface(DLL)の3つのプロジェクトがあることを意味します。すべてが1つの解決策です。 DatabaseInterfaceプロジェクトには、別のC++ x86、DLLへのネイティブAPIコールが含まれていますが、 "using"ステートメントでこのDLLを明示的に参照していません。

どちらも、SettingsManagerで、パス&などの設定データを保存していますが、とにかく保存しています。 TestProjectとDatabaseInterfaceの両方とも、SettingsManagerを参照します。

3つのプロジェクトはすべて「デバッグ」と「AnyCPU」の下にビルドされています。 &は、TestProjectでSettingsManagerのみを使用しても問題ありませんが、DatabaseInterfaceを追加するとBadImageFormatExceptionが表示され、間違った形式のファイルをロードしようとしています。これは動作しません

using myNamespace.Settings; // contains SettingsManager 
using myNamespace.DbInterface; // contains DatabaseInterface, which contains native calls to C++ dll 
using System; 
using NUnit.Framework; 

namespace myNamespace.myTestProject 
{ 
    [TestFixture] 
    public class TestProject 
    { 
     DatabaseInterface instance = null; 
     [SetUp] 
     public void SetUp() 
     { 

     } 

     [Test] 
     public void ReadDbFile() 
     { 
      string s = SettingsManager.DbFile; // gets the path of the db file 
     } 
    } 
} 

2回目の試行を、

using myNamespace.DbInterface; 
を含む

using myNamespace.Settings; // contains SettingsManager 
using System; 
using NUnit.Framework; 

namespace myNamespace.myTestProject 
{ 
    [TestFixture] 
    public class TestProject 
    { 
     [SetUp] 
     public void SetUp() 
     { 

     } 

     [Test] 
     public void ReadDbFile() 
     { 
      string s = SettingsManager.DbFile; // gets the path of the db file 
     } 
    } 
} 

NUnitの出力:、それはより多くの目に見えるthatsの作業を行うことが

はをスローします。myNamespace.myTestProject.TestProject(TestFixtureSetUp): SetUp:System.BadImageFormatException: "DatabaseInterface、Version = 1.0.0.0、Culture = neutral、PublicKeyToken = null"というアセンブリまたは参照が見つかりませんでした。それは間違った形式のファイルをロードしようとしました。」

すべての3つのプロジェクトはデバッグAnyCPUを使用して構築されている場合でも。私はのように、標準の* .configファイルを使用してい

NUnitのTestprojectの一つ。たぶんいくつかは、これが間違っている。

は、誰もがこれまでに別のDLLからコードをロードしようと同じエラーが発生しましたしましたか? それは両方のプロジェクト(テスト&データベース)を参照して問題になることができますSettingsManager DLL? 何か大きな間違いをする?

3つのプロジェクトすべてで私のビルド構成をダブルチェックしましたが、間違っている可能性のある設定が見つかりませんでした。BadImageFormatExceptionについて説明しています。

答えて

5

任意のCPUを対象とするnunit.exe GUIランナーを使用している可能性があります。これはターゲットプラットフォームにコンパイルされたJITですが、この問題が発生しているのでx64と仮定します。代わりに、nunit-x86.exeを使用してテストを実行してみてください。このバージョンのGUIランナーは、具体的には、DatabaseInterfaceライブラリの依存関係と互換性がある32ビットプロセスで動作するように設定されています。

+0

おそらくそれは私が推測する問題でした。私は64ビットWin7を使用しているので、「AnyCPU」を意味するものはすべて64ビットになります。それは32ビットコンパイルされたDatabaseInterface DLLのエラーでした。 – inva

1

あなたの依存関係の依存関係の問題かもしれません。依存関係がx86のCOMアンマネージドライブラリに依存し、x64で実行している場合に発生する可能性があります。コード内でその依存関係を使用しようとするまで、すべてがうまく動作します。BadImageFormatExceptionがスローされます。

これを解決するには、特定のターゲット(x86またはx64)をプロジェクトに追加して、それを試す必要があります。

+0

いいえthats私が今までNUnitを気にしている理由 - 私は特定のビルドターゲットプラットフォームmlike x86またはx64を設定できません。私がそうするならば、私はBadManagerFormatExceptionを取得するでしょう。なぜなら、x86/x64を明示的に設定するとAnyCPU *をビルドターゲットとして設定しなければならないということですが、なぜこれまでのところわかりません。 – inva

関連する問題