2011-11-21 13 views
6

Ho sfogliato un paio di problemi con Nunit e Visual Studio dichiarati su StackOverflow, ma non riesco a trovare alcun thread in cui si adatti la mia custodia.NUnit C# Test Progetto che fa riferimento ad altre DLL

Sto usando NUnit per testare il codice che ho scritto, sto caricando il file * .csproj del mio testproject in NUnit GUI Tool.

Ho capito il problema, ma credo di non aver trovato soluzione. Cosa sto facendo:

I riferimento a 2 altri progetti entrambi sono progetti DLL. Ciò significa che ho ottenuto 3 progetti: TestProject (DLL), SettingsManager (DLL), DatabaseInterface (DLL). Tutti sono in una soluzione. Il progetto DatabaseInterface contiene chiamate API native a un altro, C++ x86, DLL, ma non fa esplicito riferimento a questa DLL tramite l'istruzione "using".

Uno di entrambi è un SettingsManager, che memorizza alcuni dati di configurazione come i percorsi & così via, ma comunque. Entrambi, Testproject e DatabaseInterface fanno riferimento a SettingsManager.

Tutti e 3 i progetti sono creati in "Debug" e in "AnyCPU". Fare riferimento a & utilizzando solo il SettingsManager nel mio TestProject funziona correttamente ma quando aggiungo il DatabaseInterface, ho ottenuto una BadImageFormatException che mi dice che sta provando a caricare un file con un formato sbagliato.

Per renderlo più visibile, questo è lavoro:

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 uscita:

Questo non funziona:

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 
     } 
    } 
} 

Il secondo tentativo, che contiene la

using myNamespace.DbInterface; 

getta uno myNamespace.myTestProject.TestProject (TestFixtureSetUp): SetUp: System.BadImageFormatException: Die Datei oder Assembly "DatabaseInterface, Version = 1.0.0.0, Culture = neutral, PublicKeyToken = null" o un riferimento non trovato. Si è cercato di caricare un file di un formato sbagliato ".

anche se tutti e 3 i progetti sono costruire utilizzando debug e AnyCPU.

sto usando un file * .config di serie, come quello della NUnit TestProject. Forse alcuni è sbagliato in questo.

qualcuno ha incontrato lo stesso errore nel tentativo di caricare il codice da un altro DLL finora? Può essere un problema che entrambi i progetti (test & database) fanno riferimento al SettingsManager DLL? L'ho fatto fare qualcosa di grave sbagliato?

Ho ricontrollato la configurazione della build in tutti e 3 i progetti ma non sono riuscito a trovare le impostazioni che potrebbero essere errate e spiega la BadImageFormatException.

risposta

5

Probabilmente si utilizza il runner della GUI nunit.exe indirizzato a qualsiasi CPU. Sarà JIT compilato per la piattaforma di destinazione, che presumo sia x64 dato che hai riscontrato questo problema. Invece, prova a usare nunit-x86.exe per eseguire i tuoi test. Questa versione del runner della GUI è specificamente progettata per essere eseguita in un processo a 32 bit che sarà compatibile con la dipendenza della libreria DatabaseInterface.

+0

probabilmente era questo il problema, credo. Perché sto usando un Win7 a 64 bit tutto ciò che significa "AnyCPU" sarà 64 bit più tardi. Quello era l'errore con la DLL DatabaseInterface che era compilata a 32 bit. – inva

1

Potrebbe essere un problema di dipendenza delle dipendenze. Può accadere se la dipendenza dipende dalla libreria non gestita COM x86 e si sta eseguendo su x64.Tutto andrà bene, fino a quando non proverai a usare quella dipendenza nel tuo codice - genererà BadImageFormatException.

Per superare questo problema, è necessario aggiungere un obiettivo specifico (x86 o x64) al progetto e provare con quello.

+0

no, questo è il motivo per cui ho dannatamente NUnit finora - non posso impostare una specifica piattaforma di destinazione build mlike x86 o x64. Se lo faccio, otterrò anche BadImageFormatException per la DLL di SettingsManager. Io rosso che uno deve impostare * AnyCPU * come target di costruzione ... e non funziona se imposto x86 o x64 esplicito, ma non so perché finora. – inva

Problemi correlati