SpecFlow неправильно использует NUnit - PullRequest
14 голосов
/ 05 ноября 2011

Я только что (сегодня) попробовал SpecFlow впервые.Я играю, создав новую библиотеку классов в VS2010 Pro и добавив файл определения возможностей SpecFlow.

Дело в том, что интеграция не работает должным образом, с множеством различных ошибок.Я выбрал MsTest в качестве тестового прогона, потому что я не могу быть обеспокоен вызовом NUnit (я хотел бы использовать NUnit в долгосрочной перспективе, но в данный момент я просто хочу заставить работать некоторый BDD-код).Однако сгенерированные файлы кода продолжают ссылаться на NUnit - что, очевидно, неправильно, поскольку я только что сказал SpecFlow работать с использованием MsTest.Я сделал все, что мог придумать, чтобы снова вызвать генерацию кода, включая создание нового проекта библиотеки классов с опцией MsTest, выбранной в меню «Инструменты> Параметры> SpecFlow».

Если я оставлю поле «Выполнитель теста установленным»«Авто» и щелкните правой кнопкой мыши файл объекта, затем выберите «Запустить сценарии SpecFlow». Появится сообщение об ошибке «Не удалось найти подходящего тестового исполнителя».

Если я вместо этого изменю поле тестового поля на MsTest,Я получаю другое сообщение об ошибке при выполнении того же действия - «Ссылка на объект не установлена ​​для экземпляра объекта».Я не удивлен этим, так как он все еще пытается запустить тесты NUnit, хотя я явно просил MsTest, хотя, очевидно, он не должен nullref и представлять его пользователю.

Что я делаюнеправильно?Документация не полезна, и, насколько я вижу, часто задаваемых вопросов нет.

edit # 1 : я установил, что фактическая настройка, которую я ищу, предоставляется с помощьюApp.Config с использованием поля <unitTestProvider name="MsTest" />.Я вижу, что произошло - поле в меню параметров Visual Studio, похоже, не изменяет проект, над которым вы сейчас работаете.Дело в том, что это выглядит так, будто это поле вообще ничего не делает.Теперь я убедил SpecFlow сгенерировать классы MsTest и запустить их с помощью бегуна MSTest.

Так что теперь вопрос превращается в немного другой: Что (если что-нибудь) делает Tools> Options> SpecFlow>Поле Test Runner Tool сделать?

Ответы [ 5 ]

9 голосов
/ 09 декабря 2011

Для VS2010 правильное значение - MsTest.2010, а не MsTest, как задокументировано. Измените ваш app.config (для тестовой сборки), и он будет работать нормально (по крайней мере, с SpecFlow 1.8)

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <section name="specFlow" type="TechTalk.SpecFlow.Configuration.ConfigurationSectionHandler, TechTalk.SpecFlow" />
  </configSections>
  <specFlow>
      <unitTestProvider name="MsTest.2010" />
      <!-- For additional details on SpecFlow configuration options see https://github.com/techtalk/SpecFlow/wiki/Configuration -->
  </specFlow>
</configuration>
7 голосов
/ 18 января 2012

В ответ на ваш последний вопрос.Что такое настройка «Инструменты> Параметры> SpecFlow> Test Runner Tool» эта настройка контролирует то, что на самом деле будет запускать тесты, а не то, что будет генерировать код теста.Если он установлен в автоматический режим, я полагаю, что он посмотрит на файл App.config, в котором вы установили unitTestProvider, чтобы определить, какой инструмент лучше всего подходит для запуска тестов.Альтернативный Runner Test, созданный теми же парнями, что и SpecFlow, называется SpecRun http://www.specrun.com/

, поэтому при запуске тестов он будет использовать эту опцию.Как вы обнаружили, генератор кода использует файл конфигурации, чтобы определить, какой тип теста он должен сгенерировать (mstest / nunit ..)

Если вы запустили установщик specfow (https://github.com/downloads/techtalk/SpecFlow/SpecFlowSetup_v1.8.1.msi) для установкивсе компоненты интеграции Visual Studio при изменении файла App.config обычно выдают запрос на восстановление функций с использованием нового поставщика.Ручной способ сделать это - щелкнуть правой кнопкой мыши по элементу и выбрать «Запустить пользовательский инструмент»

Что касается документации, нашли ли вы git hub wiki?https://github.com/techtalk/SpecFlow/wiki/Documentation

2 голосов
/ 24 мая 2018

Способ, который я прочитал, состоит в том, что бегущий тест полностью отличается от генератора кода, хотя это не всегда имеет смысл, когда бегун MsTest не знает о NUnit (я думаю). Из готовой версии последняя версия (v2.3.2), даже если она установлена ​​с пакетом nuget SpecFlow.MsTest (той же версии), не настраивает ваш компьютер для генерации классов на основе MsTest в фоновом режиме. Я использую VS2017 и установил Resharper в качестве моего «тестового прогона», но главное требование для генерации кода на основе MsTest - это изменение в app.config. Согласно вики-документации , вам также необходимо следующее в файле app.config. При сохранении конфигурации вам будет предложено восстановить файлы.

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="specFlow"
             type="TechTalk.SpecFlow.Configuration.ConfigurationSectionHandler, TechTalk.SpecFlow"/>
  </configSections>
  <specFlow>
    <unitTestProvider name="MsTest" />
  </specFlow>
</configuration>
2 голосов
/ 18 июня 2012

Мы используем ReSharper в качестве участника для приемочных испытаний SpecFlow; это работало хорошо прямо из коробки. Хотя ReSharper не бесплатен, но он стоит каждого пенни ...

1 голос
/ 09 ноября 2011

Мне никогда не удавалось заставить SpecFlow работать правильно из Visual Studio, я потратил некоторое время, работая над этим, но никогда никуда не уходил.Хотя я нашел эти инструкции по настройке NUnit в Visual Studio 2010, и я использую этот ярлык для хорошего выполнения моих тестов SpecFlow.Мне удалось объединить средство запуска командной строки NUnit и генератор отчетов SpecFlow в один скрипт, который я могу легко запустить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...