2016-05-30 4 views
0

Мы обновили наше решение от SpecFlow1.9 до 2.0 и NUnit2.6.4 до 3.2.1. После адаптации некоторых атрибутов и параметров проекта все тесты выполняются отлично в NUnit. Однако, когда испытания SpecFlow выполнены с NCrunch, мы получаем SpecFlowException:SpecFlow и NCrunch: многопоточная ошибка при выполнении в одном потоке

TechTalk.SpecFlow.SpecFlowException : The ScenarioContext.Current static accessor cannot 
be used in multi-threaded execution. Try injecting the scenario context to the binding 
class. See http://go.specflow.org/doc-multithreaded for details. 
at TechTalk.SpecFlow.ScenarioContext.get_Current() 

Мы специально разработали наши тесты SpecFlow для однопоточных сред (держать усилия ниже) и мы просто хотим, чтобы продолжить выполнение этих тесты в одном потоке. Поэтому вместо того, чтобы вводить контекст сценария в качестве предлагаемого решения (мы используем NInject вместо SpecFlow mini-IoC), мы ищем некоторые настройки, чтобы убедить SpecFlow, что он работает в однопоточной среде.

Вот NCrunch 2.23.0.2 настройки:

Я вошел в файлах Assembly.cs всех SpecFlow тестирует следующий атрибут:

[assembly: Parallelizable(ParallelScope.None)] 

без успеха; исключение продолжает появляться.

Кто-нибудь знает, как заставить SpecFlow2.0 в NCrunch2.23.0.2 с NUnit3.2.1 так, чтобы он думал, что он выполняется в однопоточной среде?

Благодарим вас за внимание!

2016-5-31: обновление

Я установил новую версию 2.1 SpecFlow (доступно начиная с 2016-5-25), но это не решило проблему.

Я создал example project с минимальным количеством кода для создания проблемы. Реализация калькулятора является statefull и не может быть протестирована в многопоточной среде.

SpecFlow выдает исключение из-за статической ссылки (фиктивный) «ScenarioContext.Current» в CustomContext. Да, я знаю, что вы должны его вводить, если вы собираетесь работать в многопоточной тестовой среде. Проблема в том, что SpecFlow ДУМАЕТ, что он находится в многопоточной среде, но это не так, и это не должно.

+0

remco [поднял вопрос] (https://github.com/techtalk/SpecFlow/issues/638) на страница с ошибками в github. Пожалуйста, следуйте этой проблеме. –

+0

2016-08-01. Согласно странице выпуска, это было исправлено в предварительной версии, доступной из AppVeyor – stevef4000

ответ

0

После обновления необходимо восстановить файлы позади файлов Feature после обновления.

Смотрите шаги обновления здесь: http://gasparnagy.com/2016/01/specflow-tips-how-to-upgrade-your-project-to-specflow-v2/

+0

Спасибо Андреасу. Уже это сделал. Все сгенерированные файлы кода SpecFlow содержат «SpecFlow Version: 2.0.0.0», и, как уже упоминалось, тесты выполняются с помощью nunit VS plugin и nunit-console.exe, но не с NCrunch. –

2

В исследовании, это, как представляется, проблема совместимости 3-полосная между NCrunch, SpecFlow и NUnit3.

Как часть своего поведения, NCrunch будет повторно использовать тестовые процессы, вызвав их несколько раз (т. Е. Один раз для каждой партии тестов в очереди обработки). Поскольку NUnit3 запускает новый поток для каждого тестового сеанса, он заканчивает использование другого потока для каждого вызова в SpecFlow.

Установка предела конфигурации памяти «Тест-память процесса». Настройка конфигурации NCrunch на «1» позволит вам обойти проблему, поскольку это вызовет отказ NCrunch от тестового процесса после каждой партии, а не повторное использование его , К сожалению, это окажет значительное влияние на производительность.

Я сообщил об этой проблеме SpecFlow. Из-за его природы наиболее разумным было бы установить его в SpecFlow - https://github.com/techtalk/SpecFlow/issues/638