TypeInitializationException при запуске mstest из командной строки - PullRequest
2 голосов
/ 28 июля 2010

У нас есть подмножество модульных тестов, которые до недавнего времени всегда выполнялись через Visual Studio.Сейчас я работаю над настройкой непрерывной интеграции, которая будет запускать тесты.Все тесты проходят при запуске через Visual Studio, но когда я пытаюсь запустить их из командной строки, используя mstest, они терпят неудачу с «TypeInitializationException», который говорит, что он не может найти файл dll для типа.

System.TypeInitializationException: The type initializer for foo.bar_Accessor' threw an exception. 
--->  System.IO.FileNotFoundException: Could not load file or assembly 'foo, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. 
The system cannot find the file specified.Assembly manager loaded from: 
c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\mscorwks.dll

Рассматриваемая dll является ссылкой на проект в модульном тестовом проекте.Существует также ссылка на тест, который создает версию класса foo.bar_Accesor.

Я заметил, что когда тесты запускаются в Visual Studio, создается папка "Coverage _timestamp", которая содержит IN и OUT.папка.Папка OUT содержит, помимо прочего, foo.dll и foo_accesor.dll.

Когда тесты запускаются из командной строки, создается папка «username _timestamp», которая содержит только папку OUT.Папка OUT содержит, помимо прочего, файл foo_accesor.dll, но не файл foo.dll, указанный в сообщении об ошибке.

1 Ответ

0 голосов
/ 06 января 2012

Мне удалось решить это для нас с помощью переключателя /noisolation. Этот переключатель описывается как:

Запуск тестов в процессе MSTest.exe. Этот выбор повышает скорость выполнения теста, но увеличивает риск для процесса MSTest.exe.

Мой скрипт MSBuild теперь выглядит примерно так:

<Target Name="Test" DependsOnTargets="Compile">
  <PropertyGroup>
    <TestSuccessOrNot>1</TestSuccessOrNot>
  </PropertyGroup>
      <Exec Command='"$(VS100COMNTOOLS)..\IDE\mstest.exe" /noisolation /testcontainer:"C:\path\to\test.dll"' >
    <Output TaskParameter="ExitCode" PropertyName="TestSuccessOrNot"/>
  </Exec>
  <Error Condition="$(TestSuccessOrNot) == 1" Text="Unit tests fail!"/>
</Target>
...