使用NUnit时,如何在运行时修改app.config?

时间:2013-11-21 19:30:23

标签: c# unit-testing nunit app-config

我有一个正在测试Console App项目的NUnit测试项目。 Console应用程序项目大量使用app.config文件。从我的NUnit测试项目运行测试时,正在测试的代码使用我的Tests.dll.config文件中的配置值。此文件位于我的Test项目的根目录中,是来自正在测试的应用程序的app.config文件的副本。

但是,在某些测试中,我需要更改某些配置设置的值。我一直在我的Nunit测试中使用它来做到这一点:

ConfigurationManager.AppSettings.Set("SettingKey" , "SettingValue");

我不希望我在一次测试中做出的这些运行时配置更改会干扰或被任何其他测试看到。这是正确的方法吗?

更新 我还要提一下,我的测试是并行进行的。我想这是因为我正在使用Re-sharper。 因此,如果我在一个测试中更改配置,我认为它可能会更改另一个测试中的配置,这是我不想要的。

2 个答案:

答案 0 :(得分:1)

是否可以在界面中包装代码读取配置? 例如:

public interface IAppSettings
{
   string Get(string settingKey);
}

因此您可以轻松地从app.settings文件中进行抽象。 然后在您的NUnit项目中,您可以通过一个简单的类实现IAppSettings并配置您的应用程序以使用它。在这种情况下,您不需要读取真正的app.config文件,并且可以轻松更改配置。它还可以加快你的测试速度。

答案 1 :(得分:1)

您似乎对集成测试感兴趣,而不是单元测试。原因是您的测试需要访问配置文件修改一些值,以便您的测试可以正确运行。

您说您不希望运行时配置更改干扰其他测试。 最好的方法就是使用NUnit内置的测试初始化​​和拆卸方法。

例如,您可以使用 A. NUnit [setup]属性使运行时更改为您的配置

B中。 NUnit [teardown]属性回滚你所做的更改

查看更多信息 http://www.nunit.org/index.php?p=setup&r=2.2.10

请注意,每个类中的每个测试都会运行上面的设置/拆卸序列。

因此,如果您需要更多自定义方法,您可以简单地创建自己的设置方法,并在断言调用拆除方法后清除/回滚您在设置方法中执行的操作后,从您需要的测试中调用它。这样它只会影响您需要更改配置值的测试。

例如(伪代码)

Public void Mytestmethod()
       Call my own test init
       Call SUT
       Perform Any asserts
       Call My own tear down