Адаптер модульного теста выбросил исключение: не удалось загрузить один или несколько запрошенных типов

Я пытаюсь запустить тесты SpecFlow из командной строки Visual Studio 2010, и я получаю довольно тупое сообщение об ошибке:

модульный тестовый адаптер бросил исключение: Не удается загрузить один или более запрошенных типов. Получения свойства LoaderExceptions для получения дополнительной информации..

некоторая информация о моей настройке проекта VS2010:

  • Windows 7 Enterprise, 64 бит (версия 6.1.7601 пакет обновления 1 Build 7601)
  • Visual Studio 2010 Premium (v10.0.40219.1 SP1Rel)
  • использование закодированных тестов пользовательского интерфейса
  • используя SpecFlow 1.9.0, который делегирует API тестирования CodedUI
  • MSTest
  • .NET v4.0.30319
  • все решение компилируется в 32-битный код (у меня есть коллеги, использующие XP еще)

у меня есть событие после сборки, которое копирует несколько DLL-файлов из моего каталога пакетов NuGet в целевой реж:

copy $(SolutionDir)packagesSpecBind.1.2.1.71libnet45SpecBind.dll $(TargetDir)
copy $(SolutionDir)packagesSpecBind.CodedUI.1.2.1.71libnet45SpecBind.CodedUI.dll $(TargetDir)

без этого mstest как-то не смог загрузить несколько сборок SpecFlow.

соответствующие части приложения тестового проекта.config

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <section name="specFlow" type="TechTalk.SpecFlow.Configuration.ConfigurationSectionHandler, TechTalk.SpecFlow" />
    <section name="specBind" type="SpecBind.Configuration.ConfigurationSectionHandler, SpecBind" />
  </configSections>

  <connectionStrings>
    ...
  </connectionStrings>

  <specFlow>
    <!-- For additional details on SpecFlow configuration options see http://go.specflow.org/doc-config -->
    <unitTestProvider name="MsTest" generatorProvider="Specflow.CodedUI.MsTestCodedUiGeneratorProvider, Specflow.CodedUI" runtimeProvider="TechTalk.SpecFlow.UnitTestProvider.MsTest2010RuntimeProvider, TechTalk.SpecFlow" />
    <stepAssemblies>
      <!-- This attribute is required in order to use StepArgument Transformation as described here; 
           https://github.com/marcusoftnet/SpecFlow.Assist.Dynamic/wiki/Step-argument-transformations  -->
      <stepAssembly assembly="SpecFlow.Assist.Dynamic" />
      <stepAssembly assembly="SpecBind" />
    </stepAssemblies>
  </specFlow>
  <specBind>
    <browserFactory provider="SpecBind.CodedUI.CodedUIBrowserFactory, SpecBind.CodedUI" browserType="IE" />
    <!-- For additional details on SpecBind configuration options see the project site. -->
  </specBind>
</configuration>

команда, которую я использовал для запуска тестов:

C:pathtobinDebug> mstest /testcontainer:MyTests.dll /test:SpecFlowFeatureName

Loading MyTests.dll
Starting Execution...

Results         Top Level Tests
--------        ------------------
Failed          ...
Failed          ...
Failed          ...

...

Я искал повсюду решение, и все, что я продолжаю находить, это ссылки на VS2008 и отключение покрытия кода. У меня есть VS2010, и покрытие кода не включено в моем локальном тесте настройки.

Средство Просмотра Журнала Событий Windows

после укоренения в моем Windows Event Log viewer я, наконец, наткнулся на дополнительную информацию (я слышал, как люди жалуются, что не могут найти трассировку стека с этой ошибкой-посмотрите в вашем средстве просмотра событий)

The description for Event ID 0 from source VSTTExecution cannot be found. Either the component that raises this event is not installed on your local computer or the installation is corrupted. You can install or repair the component on the local computer.

If the event originated on another computer, the display information had to be saved with the event.

The following information was included with the event: 

(QTAgent32.exe, PID 6920, Thread 213) Unit Test Adapter threw exception: System.Reflection.ReflectionTypeLoadException: Unable to load one or more of the requested types. Retrieve the LoaderExceptions property for more information.
   at System.Reflection.RuntimeModule.GetTypes(RuntimeModule module)
   at System.Reflection.RuntimeModule.GetTypes()
   at System.Reflection.Assembly.GetTypes()
   at Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestExecuter.GetAssemblyInfo(Assembly assembly)
   at Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestExecuter.GetTypeInfo(Type type, Boolean checkAlreadyExaminedType)
   at Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestExecuter.ResolveMethods()
   at Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestExecuter.Initialize(UnitTestResult result, UnitTestRunner runner, ConsoleOutputRedirector redirector)
   at Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestRunner.Run(UnitTestElement test, ITestContext testContext, Boolean isLoadTest, Boolean useMultipleCpus)

the message resource is present but the message is not found in the string/message table

Я не знаю, как устранить эту ошибку. Тесты SpecFlow отлично работают внутри Visual Studio, когда я щелкаю Правой Кнопкой Мыши .файл функций загружен в Редактор и выберите "Запустить сценарии SpecFlow..."но я не удается запустить их из командной строки.

любые идеи или дополнительная информация, которую я мог бы опубликовать?

в качестве примечания, это вытекало из моего предыдущего вопроса:как запустить сценарии SpecFlow из командной строки с помощью MSTest?

обновление #1

Я сделал немного больше копать, и нашел этот блог: MSTest и 64bit. Я проверил свои локальные параметры тестирования, и он заставляет тесты запускаться 32-битный.

теперь с помощью этой команды:

mstest /testcontainer:MyTests.dll /testsettings:"......Local.testsettings"

сообщение об ошибке:

Test method Blah.Dee.Blah threw exception: 
System.IO.FileNotFoundException: Could not load file or assembly 'Microsoft.VisualStudio.TestTools.UITest.Extension, Version=11.0.0.0, Culture=neutral, PublicKeyToken=...' or one of its dependencies. The system cannot find the file specified.WRN: Assembly binding logging is turned OFF.
To enable assembly bind failure logging, set the registry value [HKLMSoftwareMicrosoftFusion!EnableLog] (DWORD) to 1.
Note: There is some performance penalty associated with assembly bind failure logging.
To turn this feature off, remove the registry value [HKLMSoftwareMicrosoftFusion!EnableLog].

TestCleanup method Blah.Dee.Blah.ScenarioTearDown threw exception. BoDi.ObjectContainerException: BoDi.ObjectContainerException: Interface cannot be resolved: SpecBind.BrowserSupport.IBrowser.

обновление #2

Я удалил ссылку на Microsoft.VisualStudio.TestTools.Uitest в.Расширение и добавил его обратно. Вычищенный. Перестроенный. Снова выполните ту же команду. Все еще получаю ту же ошибку.

по какой-то причине он пытается загрузить Microsoft.VisualStudio.TestTools.Uitest в.Сборка расширения как Версия 11, и у меня установлена версия 10 на моей машине. Я пытаюсь отследить, где указана эта версия, чтобы я мог ее изменить.

4 ответов


на всякий случай, если кто-то еще столкнется с этим, для меня это было потому, что покрытие кода было включено. Отключение его решило проблему:

http://blogs.msdn.com/b/danielvl/archive/2010/02/16/enable-code-coverage-in-visual-studio.aspx

  • открыть .файл testsettings
  • в разделе "Параметры тестирования" нажмите "данные и диагностика"
  • Снимите Флажок "Покрытие Кода"
  • Нажмите "Применить"

С помощью комментария @jessehouwing выше, у меня это исправлено. Я столкнулся с двумя проблемами.

ошибка, на которую я изначально ссылался, была вызвана попыткой mstest запустить тесты в 64-битном процессе (QTAgent.исполняемый.) Мне нужно было запустить его как 32-битный процесс, потому что проект был дополнен 32-битным кодом на моей 64-битной машине Windows 7.

В Visual Studio 2010:

  1. Нажмите Меню "тест" - > "изменить настройки теста" - > " локальный (местный.testsettings), в"
  2. нажмите "хосты" в левой панели
  3. убедитесь, что "принудительные тесты для запуска в 32-битном процессе" выбраны в раскрывающемся списке "запустить тесты в 32-битном или 64-битном процессе". Для меня это было по умолчанию
  4. в командной строке Visual Studio запустите тесты, сославшись на локальный.файл testsettings, созданный Visual Studio:

    mstest /testcontainer:foo.dll /testsettings:"path/to/solution/local.testsettings" /test:SpecFlowFeatureName
    

вторая проблема, которая у меня была, была моей собственной виной. Раньше я играл вокруг с закодированными тестами UI и SpecFlow и были установлены SpecBind, который бросил кучу настроек в приложении.config для моего тестового проекта. Этот пакет NuGet предназначен только для .NET 4.5, и мы используем .NET 4.0. Я удалил этот пакет NuGet и настройки приложения.конфигурации, очищены и восстановлены. Это полностью исправило эту проблему.

короче говоря, я:

  • принудительный mstest для запуска в 32-битном процессе и ссылается на этот локальный.файл testsettings из команды линия
  • удалены все ссылки на SpecBind, потому что я получил немного NuGet-happy ранее и установил пакет, несовместимый с моей .NET runtime.

Как вы можете видеть, просматривая ссылки на сборки, требуемые этими пакетами (я использую Reflector для этого, но ILSpy или JetBrains' DotPeek также будут работать), вы увидите, что они зависят от версии v11, которая поставляется с Visual Studio 2012. Их нельзя использовать в Visual Studio 2010.

Specbind References

удаление SpecBind, вероятно, поможет или найти версию, которая зависит от более старой версии CodedUI (вы, вероятно, ищете много более старая версия SpecBind в этом случае).

Что касается вашей 32-битной проблемы, вы, вероятно, должны установить конфигурацию процессора вашего проекта в AnyCPU, обычно нет необходимости исправлять его на x86, если вы не зависите от собственных методов или если вы ссылаетесь на другие сборки, которые специально настроены на использование x86 в качестве своей целевой архитектуры.


Это так беспокоит.....

У меня был агент тестирования для Visual Studio 2015, установленный на моей тестовой машине, так как мы планировали использовать его - в то время как на моей локальной машине у меня был 2013. Тесты работали так отлично с MsBuild на local, что я не мог понять, что могло произойти, учитывая, что я всегда предполагал, что Microsoft всегда поддерживала обратную совместимость.

MsBuild на тестовом сервере не смог дать никакой информации о том, какие сборки отсутствовали (я добавил Newtonsoft.Json просто потому, что он жаловался изначально, но после этого я никогда не видел имен чего-либо еще). Сообщение об ошибке было усечено, параметры stacktrace и debugtrace никогда не работали...

после установки агента тестирования для Visual Studio 2013 на тестовой машине он работал как шарм.