使用NUnit 2.5.2时从App.Config读取连接字符串时出现问题

问题描述:

我将Microsoft Visual Studio 2005与Enterprise Library 3.1一起使用。

I'm using Microsoft Visual Studio 2005 with Enterprise Library 3.1.

我有一个数据访问层,它是一个单独的Visual Studio类库项目。我在另一个类库中编写了单元测试,并尝试调用数据访问方法,但是我不断得到

I have a data access layer which is a separate visual studio class library project. I wrote unit tests in a another class library and trying to call the data access method, but I keep getting

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

我猜DatabaseFactory.CreateDatabase()调用无法读取App.Config来获取连接字符串。单元测试项目具有有效的App.Config,其中包含连接字符串设置[由EntLib config实用程序添加]。我创建了一个控制台应用程序,并添加了相同的App.Config,它在控制台应用程序中运行良好。我很困惑为什么从NUnit GUI运行程序运行时为什么它不运行。

I guess the DatabaseFactory.CreateDatabase() call is not able to read the App.Config to get the connection string. The Unit Test project has a valid App.Config which contains the connection string settings [added by EntLib config utility]. I created a console application and added the same App.Config and it runs fine from Console application. I'm confused why it would not run when running from NUnit GUI runner.

任何想法吗?

谢谢,
矩阵M。

Thanks, Matrix M.

您需要告诉nunit配置文件名。在nunit gui中,转到项目>编辑,然后更改配置文件名。

You need to tell nunit the config file name. in nunit gui go to project > edit and then change the configuration file name.

似乎nunit默认情况下会查找namespace.config。 (例如,以我的情况为tb.specs.config)

It seems nunit looks for namespace.config by default. (eg. tb.specs.config in my case)