C# 当代码从配置文件读取数据时,OpenCover.Console测试失败

C# 当代码从配置文件读取数据时,OpenCover.Console测试失败,c#,unit-testing,opencover,C#,Unit Testing,Opencover,我有一个奇怪的问题。当我使用VisualStudio的OpenCover时,所有的测试都通过了,一切看起来都很好 来自Visual Studio的图像,请单击此处: 但是当我想使用OpenCover.Console.exe自动化测试时,有些测试会失败。我注意到这两个失败的测试是从配置文件读取的 测试或被测试的代码使用ConfigurationManager.AppSettings[“someConfigValue”]从配置文件中读取。 我在主项目和测试项目appsettings中有相同的值 从控

我有一个奇怪的问题。当我使用VisualStudio的OpenCover时,所有的测试都通过了,一切看起来都很好

来自Visual Studio的图像,请单击此处:

但是当我想使用OpenCover.Console.exe自动化测试时,有些测试会失败。我注意到这两个失败的测试是从配置文件读取的

测试或被测试的代码使用ConfigurationManager.AppSettings[“someConfigValue”]从配置文件中读取。 我在主项目和测试项目appsettings中有相同的值

从控制台映像执行以下两个失败的测试:

此外,我还提供了用于OpenCover.Console.exe的命令

“OpenCover.Console.exe” -登记册 -目标:“C:\ProgramFiles(x86)\Microsoft Visual Studio 12.0\Common7\IDE\MSTest.exe” -targetargs:“/noisolation/testcontainer:\”E:\TEAM\TestProject.Tests\bin\Debug\TestProject.Tests.dll“/resultsfile:TestResults.trx” -合并哈希 -输出:CodeCoverage.xml

更新[2015年9月4日] 由于我没有找到任何特定的解决方案,所以我想出了一个变通办法。 实际上,我认为配置文件及其所有数据不属于单元测试,而是属于集成测试

因此,在我的代码中,我不再使用ConfigurationManager.AppSettings[“someConfigValue”]。我所做的是创建一个ConfigurationService,在IConfigurationService中,我拥有从配置文件获取值所需的所有方法


将其注入到解决方案的BL中后,我使用mock进行单元测试。

从控制台运行时的当前工作目录与从Visual Studio运行时的相同吗?我想不会,但会接受您的建议并尝试。不会,还是不好。Visual Studio使用-target:“C:\Program Files(x86)\Microsoft Visual Studio 12.0\Common7\IDE\CommonExtensions\Microsoft\TestWindow\vstest.console.exe”try
-targetdir:“E:\TEAM\TestProject.Tests\bin\Debug”
这将导致OpenCover将其
当前目录设置到该位置;然后,您可以尝试从传递给mstest(vstest.console.exe)的
/testcontainer
参数中删除路径。谢谢@shaunwild,我将尝试您的建议。尽管我最后找到了另一个解决办法。