2009-10-27 3 views
5

Utilizzo Microsoft Visual Studio 2005 con Enterprise Library 3.1.Problema nella lettura della stringa di connessione da App.Config quando si utilizza NUnit 2.5.2

Ho un livello di accesso ai dati che è un progetto di libreria di classi Visual Studio separato. Ho scritto unit test in un'altra libreria di classi e cercando di chiamare il metodo di accesso ai dati, ma continuo a ricevere

PSMCP.Dal.Tests.DataManagerTests.GetAAAReturnsDataReader: 
System.NullReferenceException : Object reference not set to an instance of an object. 

at Microsoft.Practices.EnterpriseLibrary.Data.DatabaseMapper.MapName(String name, IConfigurationSource configSource) 
at Microsoft.Practices.EnterpriseLibrary.Common.Configuration.ObjectBuilder.ConfigurationNameMappingStrategy.BuildUp(IBuilderContext context, Type t, Object existing, String id) 
at Microsoft.Practices.ObjectBuilder.BuilderBase`1.DoBuildUp(IReadWriteLocator locator, Type typeToBuild, String idToBuild, Object existing, PolicyList[] transientPolicies) 
at Microsoft.Practices.ObjectBuilder.BuilderBase`1.BuildUp(IReadWriteLocator locator, Type typeToBuild, String idToBuild, Object existing, PolicyList[] transientPolicies) 
at Microsoft.Practices.ObjectBuilder.BuilderBase`1.BuildUp[TTypeToBuild](IReadWriteLocator locator, String idToBuild, Object existing, PolicyList[] transientPolicies) 
at Microsoft.Practices.EnterpriseLibrary.Common.Configuration.ObjectBuilder.EnterpriseLibraryFactory.BuildUp[T](IReadWriteLocator locator, IConfigurationSource configurationSource) 
at Microsoft.Practices.EnterpriseLibrary.Common.Configuration.ObjectBuilder.EnterpriseLibraryFactory.BuildUp[T](IConfigurationSource configurationSource) 
at Microsoft.Practices.EnterpriseLibrary.Common.Configuration.ObjectBuilder.NameTypeFactoryBase`1.CreateDefault() 
at Microsoft.Practices.EnterpriseLibrary.Data.DatabaseFactory.CreateDatabase() 
at PSMCP.Dal.PSMCPDataManager.GetAAACall(String searchStr, Int32 filterCategory, Int32 centerId) in C:\Documents and Settings\user1\My Documents\Visual Studio 2005\Projects\Test\AAA.Dal\DataManager.cs:line 61 
at PSMCP.Dal.Tests.DataManagerTests.GetAAAReturnsDataReader() in C:\Documents and Settings\user1\My Documents\Visual Studio 2005\Projects\Test\PSMCP.Dal.Tests\DataManagerTests.cs:line 27 

Credo che la chiamata DatabaseFactory.CreateDatabase() non è in grado di leggere l'app.config per ottenere il stringa di connessione. Il progetto Unit Test ha un App.Config valido che contiene le impostazioni della stringa di connessione [aggiunte dall'utilità di configurazione EntLib]. Ho creato un'applicazione console e ho aggiunto lo stesso App.Config e funziona correttamente dall'applicazione Console. Sono confuso perché non dovrebbe funzionare quando si esegue da corridore GUI NUnit.

Qualche idea?

Grazie, Matrix M.

risposta

8

Il problema è che NUnit cercare i file di configurazione nella directory principale (la posizione in fase di progettazione del file di configurazione). Tuttavia, .net sposta e rinomina i file nella cartella bin. È possibile modificare le impostazioni di nunit per cercare nel contenitore quando si eseguono i test.

+0

Esattamente. Maggiori informazioni su http://stackoverflow.com/questions/666898/nunit-not-picking-up-app-settings/3608544#3608544 – abatishchev

+4

Il collegamento è interrotto. Qualche possibilità che la domanda sia stata rinominata o cancellata? – craastad

18

È necessario indicare a nunit il nome del file di configurazione. in nunit gui vai su project> edit e poi cambia il nome del file di configurazione.

Sembra che nunit cerca namespace.config per impostazione predefinita. (ad esempio tb.specs.config nel mio caso) enter image description here

+0

Desidero aggiungere che il file inserito nel Nome file di configurazione è relativo al file .nunit stesso. Dovevo fare ". \ {Nome del mio progetto} \ app.config" per farglielo trovare. Ottima risposta. – BillRob