如何设置与opencover一起使用的MSTest的dll搜索路径?

时间:2015-02-13 11:55:56

标签: mstest opencover

我的单元测试具有来自项目外部目录中的dll池的依赖项。我们的政策通常是将这些dll(来自池)的链接放在名为" System"的目录中。在项目目录中,将CopyToOutputDirectory设置为PreserveNewest。之后,在项目中我们添加对池中dll的引用,但将其设置为 not 私有副本,这意味着它不会输出到构建目录。在InitAssembly()方法中,我们设置了运行时也通过AppDomain.CurrentDomain.BaseDirectory, "System")AppDomain.CurrentDomain.AssemblyResolve中搜索。

[TestClass]
public class SomeUnitTest : OurUnitTestBase
{
  [AssemblyInitialize]
  public static void AssemblyInit(TestContext context)
  {
    Debug.WriteLine("in AssemblyInit");
    base.InitAssembly();
  }
}

从VisualStudio内部运行代码时以及从VisualStudio的Test-Explorer(vstest.executionengine.x86.exe)中运行单元测试时,这很有用。但是,当从以下批处理脚本运行时,MSTest无法在System子目录中找到dll,该脚本使用opencover执行覆盖率分析:

REM Bring dev tools into the PATH.
call "C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\Tools\VsDevCmd.bat"

mkdir .\CoverageAnalysisReport

REM Run unit tests through OpenCover
REM This allows OpenCover to gather code coverage results
.\..\..\Tools\CoverageAnalysis\opencover\OpenCover.Console.exe^
  -register:user^
  -target:MSTest.exe^  
  -targetargs:"/noresults /noisolation /testcontainer:..\bin\Debug\OurUnitTests.dll"^
  -filter:+[*]*^
  -output:.\CoverageAnalysisReport\output.xml

REM Generate the report
.\..\..\Tools\CoverageAnalysis\ReportGenerator\bin\ReportGenerator.exe^
  -reports:.\CoverageAnalysisReport\output.xml^
  -targetdir:.\CoverageAnalysisReport^
  -reporttypes:HTML^
  -filters:-OurUnitTests*

REM Open the report
start .\CoverageAnalysisReport\index.htm

生成的日志文件说,没有任何单元测试可以运行并因此失败。此外,它说明了

Warning: The assembly "BaseLib" as a direct or indirect dependency of the test container "C:\MyProject\bin\debug\ourunittests.dll" was not found.

但是我知道[AssemblyInitialize]被调用了,因为暂时放置的System.Windows.Form.MessageBox.Show(..)实际上是在执行bat文件时显示的。

有没有办法告诉MSTest也在System子目录中搜索dll?

0 个答案:

没有答案