在nunit测试中使用connectionstring

Mic*_*hel 3 .net c# nunit unit-testing

我们使用nunit.exe应用程序来运行我们的(集成)测试

现在我遇到的问题是,从测试代码所在的dll中的app.config中没有获取connectionstring.

这听起来合乎逻辑,因为nunit.exe是启动应用程序,而不是测试dll(它曾经在我从Visual Studio testframework开始测试的时候工作)但是我应该把连接字符串放在nunit.exe.config中?

我尝试在testcode中设置它们(适用于appsettings:ConfigurationManager.AppSettings.Set("DownloadDirectory", mDir);)像这样:( ConfigurationManager.ConnectionStrings.Add(conset);其中conset是一个ConnectionStringSettings对象),但后来我得到了connectiontrings部分只读的错误.

我该如何在测试中使用连接线?

编辑:我们使用实体框架,因此我们不能将连接字符串放在appsettings中,因为它直接从该部分读取,我找不到解决此问题的方法.

Eri*_*ohl 6

使用反射,您可以(在内存中)更改Configuration.ConnectionStrings [connectionName]的值,在您的情况下,您可能会在SetUp或TestFixtureSetUp中执行此操作.见http://david.gardiner.net.au/2008/09/programmatically-setting.html.

// Back up the existing connection string
ConnectionStringSettings connStringSettings = ConfigurationManager.ConnectionStrings[connectionName];
string oldConnectionString = connStringSettings.ConnectionString;

// Override the IsReadOnly method on the ConnectionStringsSection.
// This is something of a hack, but will work as long as Microsoft doesn't change the
// internals of the ConfigurationElement class.
FieldInfo fi = typeof(ConfigurationElement).GetField("_bReadOnly", BindingFlags.Instance | BindingFlags.NonPublic);
fi.SetValue(connStringSettings, false);

// Set the new connection string value
connStringSettings.ConnectionString = connectionStringNeededForNUnitTest;
Run Code Online (Sandbox Code Playgroud)