Мои модульные тесты имеют зависимости, которые находятся в пуле dll в каталоге за пределами проекта. У нас есть политика, которая обычно размещает ссылки на эти dll (из пула) в каталоге с именем «Система» внутри каталога проекта и устанавливает их CopyToOutputDirectory
в PreserveNewest
. После этого в проекте мы добавляем ссылку на dll в пул, но делаем ее не частной копией, что означает, что она не будет выводиться в каталог сборки. В методе 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, а также при запуске модульных тестов из Test-Explorer VisualStudio (vstest.executionengine.x86.exe). Однако MSTest не может найти библиотеки DLL в подкаталоге System при запуске из следующего пакетного сценария, который выполняет анализ покрытия с помощью 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 также искать библиотеки DLL в подкаталоге System?