Как установить путь поиска dll для MSTest, используемого с opencover?

Мои модульные тесты имеют зависимости, которые находятся в пуле 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?


person David    schedule 13.02.2015    source источник
comment
Можно ли запустить mstest из командной строки или vstest.console.exe без OpenCover? OpenCover не должен мешать работе программы, если она затем поднимает проблему на github с образцом, который дает сбой при запуске под OpenCover.   -  person Shaun Wilde    schedule 16.02.2015
comment
Я должен признать, что проблема не имеет ничего общего с OpenCover. Я должен посмотреть, как я могу заставить mstest успешно работать в командной строке.   -  person David    schedule 26.02.2015


Ответы (1)


Я решил это, поместив следующее в качестве содержимого файла с именем Local.testsettings в тот же каталог, что и командный файл (в котором я изменил строку -targetargs:"/testcontainer:\"..\bin\x86\Debug\OurUnitTests.dll\" /testSettings:\".\Local.testsettings\"):

<?xml version="1.0" encoding="UTF-8"?>
<TestSettings name="Lokal" id="2fa4344c-1f2f-4a04-86f3-41d223b10333" xmlns="http://microsoft.com/schemas/VisualStudio/TeamTest/2010">
  <Description>Dies sind die standardmäßigen Testeinstellungen für einen lokalen Testlauf.</Description>
  <Deployment>
    <DeploymentItem filename="..\bin\Debug\System\" />
  </Deployment>
  <Execution>
    <TestTypeSpecific>
      <UnitTestRunConfig testTypeId="13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b">
        <AssemblyResolution>
          <TestDirectory useLoadContext="true" />
        </AssemblyResolution>
      </UnitTestRunConfig>
    </TestTypeSpecific>
    <AgentRule name="Execution Agents">
    </AgentRule>
  </Execution>
</TestSettings>
person David    schedule 21.12.2015