这是我的设置:
/
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.config
或Web.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
?这有什么意义呢?
答案 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
- 标志,一切正常。