Я пытаюсь запустить тесты SpecFlow из командной строки Visual Studio 2010, и я получаю довольно тупое сообщение об ошибке:
Unit Test Адаптер сбросил исключение: Невозможно загрузить один или несколько запрошенных типов. Получите свойство LoaderExceptions для получения дополнительной информации.
Некоторая информация о моей настройке проекта VS2010:
- Windows 7 Enterprise, 64 бит (версия 6.1.7601 с пакетом обновления 1 (SP1) для сборки 7601)
- Visual Studio 2010 Premium (v10.0.40219.1 SP1Rel)
- Использование кодированных пользовательских интерфейсов
- Использование SpecFlow 1.9.0, который делегирует API-интерфейсу CodedUI
- MSTest
- .NET v4.0.30319
- Всего решение компилируется в 32-битный код (у меня есть сотрудники, использующие XP)
У меня есть событие post-build, которое копирует несколько DLL файлов из каталога пакетов NuGet в целевой каталог:
copy $(SolutionDir)packages\SpecBind.1.2.1.71\lib\net45\SpecBind.dll $(TargetDir)
copy $(SolutionDir)packages\SpecBind.CodedUI.1.2.1.71\lib\net45\SpecBind.CodedUI.dll $(TargetDir)
Без этого mstest каким-то образом не смог загрузить несколько сборок SpecFlow.
Соответствующие части тестового проекта App.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:\path\to\bin\Debug> mstest /testcontainer:MyTests.dll /test:SpecFlowFeatureName
Loading MyTests.dll
Starting Execution...
Results Top Level Tests
-------- ------------------
Failed ...
Failed ...
Failed ...
...
Я искал высоко и низко для решения, и все, что я продолжаю искать, это ссылки на VS2008 и отключить Code Coverage. У меня есть VS2010, а в моих локальных тестовых настройках не включено Code Coverage.
Средство просмотра событий Windows
После укорачивания в моем средстве просмотра журнала событий Windows я, наконец, набрал больше информации (я слышал, что люди жалуются, что не могут найти трассировку стека с этой ошибкой - посмотрите в своем средстве просмотра событий)
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, когда я щелкнул правой кнопкой мыши в файле .feature, загруженном в редактор, и выберите "Запустить сценарии сценариев...", но я не могу запустить их из командной строки.
Любые идеи или дополнительную информацию, которую я мог бы опубликовать?
В качестве побочной заметки это было связано с моим предыдущим вопросом: Как запустить сценарии 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 [HKLM\Software\Microsoft\Fusion!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 [HKLM\Software\Microsoft\Fusion!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.Extension и добавил ее обратно. Убирали. Перестроен. Повторите ту же команду снова. По-прежнему возникают те же ошибки.
По какой-то причине он пытается загрузить сборку Microsoft.VisualStudio.TestTools.UITest.Extension как версию 11, и у меня установлена версия 10 на моем компьютере. Я пытаюсь отслеживать, где указан этот вариант, поэтому я могу его изменить.