MSTest失败:无法在应用程序的.config文件

时间:2015-10-02 06:37:57

标签: c# unit-testing log4net mstest

这是我的设置:

/
solution.sln
Core/
    Core.csproj
web/
    web.csproj
    Web.config
Test/
    Test.csproj
    App.config
build/
    _PublishedWebsites/web/etc...
    test.dll
    test.dll.config
    Core.dll
    log4net.dll

我在Test项目中编写了单元测试,用于测试Core项目的功能。所有项目都使用log4net,所有项目都使用相应的App.configWeb.config文件配置

[assembly: log4net.Config.XmlConfigurator(Watch = true)]

AssemblyInfo.cs

使用NAnt将项目构建到build目录中。

当我从Visual Studio(2010 Professional)运行单元测试时,一切正常。

但是当我尝试直接执行MSTest时

MSTest.exe /resultsfile:TestResults.trx /noisolation /testcontainer:build\test.dll

所有测试用例都失败并出现以下错误:

log4net:ERROR Failed to find configuration section 'log4net' in the application's .config file

这让我感到困惑,因为test.dll.config文件肯定包含log4net配置部分。

MSTest创建的文件夹包含配置文件

/flopes_MyMachine 2015-10-08 08_48_59/Out/
    Core.dll
    test.dll
    test.dll.config
    log4net.dll

在我看来,MSTest可能使用了错误的配置文件,或者找不到test.dll的配置文件?这甚至有意义吗?有没有办法告诉MSTest使用哪个配置文件?

我做了一个小的测试输出,看看加载了什么配置文件,它增加了更多的神秘感,因为显然加载的配置文件是:

D:\Programme\Microsoft Visual Studio 10.0\Common7\IDE\MSTest.exe.Config

这怎么可能?为什么MSTest不只是加载旁边的配置文件 test.dll?这有什么意义呢?

1 个答案:

答案 0 :(得分:2)

我会看看这个问题并回答:MSTest.exe not finding app.config

这表明您应该创建一个包含.config作为部署项的测试运行配置。

同时检查正在使用的配置是否正确;查找活动配置文件的方法:

// Get the user-config:
ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None).FilePath

// Simple approach
AppDomain.CurrentDomain.SetupInformation.ConfigurationFile? Is it the correct .config

用@florianpeschka检查了几件事让我们相信问题是noisolation - 标志。这有点奇怪,因为noisolation基本上控制了测试实例的单独沙箱的创建,但是可能需要创建单独的进程才能使用" dynamic"用于ms-test的非硬编码配置。

简而言之,不要使用noisolation - 标志,一切正常。