Невозможно привязать мою функцию к шагам с помощью Specflow с JetBrains Rider

Я попытался настроить JetBrains Rider с помощью Specflow, следуя некоторым рекомендациям, которые я нашел в Интернете:

... спасибо за документацию, Кен.

Однако я не могу связать шаги своего сценария ни с одним из моих файлов шагов.


Настройка

Я считаю, что у меня установлены все необходимые пакеты NuGet для последней версии SpecFlow.

Снимок экрана установленных NuGet пакетов Specflow


Я привык к Cucumber с IntelliJ, и у нас также работает SpecFlow C # Visual Studio, но я просто не могу получить сценарий для подключения к шагам в Rider.

NB - проект, который я пытаюсь использовать в Rider, работает в Visual Studio с Specflow.

Кто-нибудь еще смог выиграть эту битву?

Я бы хотел услышать, как это сделать.

Спасибо


Обновление @Ken Спасибо за предложения.

Я пробовал оба следующих варианта:

  1. Вручную добавлены действия include в файл .csproj для feature.cs, но по-прежнему не удается выполнить шаги из функции после сборки.
  2. Включен атрибут Scope (Feature = "")

но, к сожалению, не повезло.

Если это не решит вашу проблему, можете ли вы опубликовать содержимое ваших файлов .feature и .steps.cs.

Как предполагается, ниже приведено содержимое файлов feature и step.cs, которые правильно отображаются в VS:

.feature

Feature: sampleFeature
  In order to avoid silly mistakes
  As a math idiot
  I want to be told the sum of two numbers

@mytag
Scenario: Add two numbers
    Given I have entered 50 into the calculator
    And I have entered 70 into the calculator
    When I press add
    Then the result should be 120 on the screen

.steps

using System;
using TechTalk.SpecFlow;

namespace SpecFlowPoc.features.sample
{
    [Binding, Scope(Feature="sampleFeature")]
    public class SampleFeatureSteps
    {
        [Given(@"I have entered (.*) into the calculator")]
        public void GivenIHaveEnteredIntoTheCalculator(int p0)
        {
            ScenarioContext.Current.Pending();
        }

        [When(@"I press add")]
        public void WhenIPressAdd()
        {
            ScenarioContext.Current.Pending();
        }

        [Then(@"the result should be (.*) on the screen")]
        public void ThenTheResultShouldBeOnTheScreen(int p0)
        {
            ScenarioContext.Current.Pending();
        }
    }
}

Спасибо


Обновление - решено

Хорошо, во-первых, спасибо, Кен, за помощь и руководство. Выполнив шаги, которые предоставляет Кен, создав новый проект и выбросив исключение, я могу подтвердить, что привязка .feature к step.cs работает.

Кен, ты джентльмен и гений. Спасибо.

Во-вторых, я ошибочно предположил, что Rider предоставит мне способ перейти от .feature к моему коду Steps.cs (стиль JVM Cucumber). Теперь я понимаю, что это еще не поддерживается Rider.

  • вот почему я думал, что привязка не работает !! Ага.

Если кто-нибудь найдет плагин, который сопоставляет огурцы Райдера с библиотекой корнишонов, я хотел бы услышать об этом.



person Peter Parker    schedule 22.06.2019    source источник
comment
Это довольно странно. Я создал файл Sample.feature, скопировал его в ваш контент, и после сборки он показал мне тест, я мог запустить его и получить сгенерированные шаги. Затем я добавил файл шагов, скопировал его в сгенерированный контент и заменил первый ScenarioContext.Current.Pending(); на throw new Exception("this is my exception");. Когда я бегу, он красиво выдает исключение. Какая у вас версия SpecFlow и версия Rider? Я использую SpecFlow 3.0.220 и Rider 2019.1.2.   -  person Ken Bonny    schedule 23.06.2019
comment
Привет, Кен, я думаю, между моей keyBoard и myChair (мной) возникла ошибка. Следуя вашим отличным инструкциям и объяснениям, я понимаю, что теперь привязка работает, тесты выполняются, и нет метода пользовательского интерфейса для перехода от .feature к шагам. Это круто. Большое спасибо. Вы легенда.   -  person Peter Parker    schedule 25.06.2019


Ответы (1)


Первое, что я могу придумать (что сам делал несколько раз) - это забыть об атрибуте [Binding] в вашем файле .steps.cs. О, и вы можете также пометить атрибут [Scope(Feature="")], просто чтобы избегать двусмысленности.

Еще вы можете сделать (если вы используете SpecFlow 3.0 и выше) вручную включить файлы .feature.cs и посмотреть, решит ли это вашу проблему. Если это так, я бы подумал о том, чтобы проверить, содержит ли файл .csproj правильные включения для файлов .feature.cs.

Если это не решит вашу проблему, можете ли вы опубликовать содержимое файлов .feature и .steps.cs.

ИЗМЕНИТЬ Я начал с нуля и сделал следующие шаги:

  1. Создать новое решение
  2. Создайте тестовый проект, выберите NUnit в качестве среды тестирования
  3. Установите последнюю версию SpecFlow.NUnit и SpecFlow.Tools.MsBuild.Generation.
  4. пакеты nuget (должна быть версия 3.0.220) (это автоматически установит правильный пакет Nuget SpecFlow)
  5. Отредактируйте .csconfig и добавьте
<Target Name="AfterUpdateFeatureFilesInProject">
    <!-- include any generated SpecFlow files in the compilation of the project if not included yet -->
    <ItemGroup>
        <Compile Include="**\*.feature.cs" Exclude="@(Compile)" />
    </ItemGroup>
</Target>
  1. Создайте файл .feature и вставьте содержимое из вопроса о переполнении стека.
  2. Создайте проект, это должно показать ваши тесты в обозревателе тестов. Запустите тесты, чтобы получить их определения.
  3. Создайте класс, в который будут помещены определения (опять же, атрибут Binding и Scope), скопируйте эти определения из окна вывода теста.
  4. Выбросить исключение в данном методе
  5. Повторите тесты и посмотрите, не возникло ли исключение.

PS: ваша секретная личность в безопасности со мной. ;)

person Ken Bonny    schedule 22.06.2019
comment
Спасибо. Обновление предоставляется в соответствии с предложением. - person Peter Parker; 23.06.2019
comment
Теперь все ясно, Кен. Моей репутации недостаточно, чтобы зарегистрировать голосование visble PLUS, но вы определенно получите его за помощь. Спасибо. - person Peter Parker; 25.06.2019
comment
Нет проблем, рад помочь. :) - person Ken Bonny; 26.06.2019
comment
@KenBonny Спасибо за помощь. Но у меня есть еще один вопрос. вы запускаете тесты из файлов .feature или файлов .feature.cs? Файлы .feature.cs нельзя отладить, и когда я нажимаю на файл .feature, я получаю Пожалуйста, укажите непустой путь к проекту огурца. Я не хочу запускать все тесты в проекте только для отладки одного, поэтому я действительно хочу запустить специальный файл функций. - person Sarseth; 26.10.2019
comment
Я использую вкладку 8: Unit Tests внизу. Они автоматически появляются там после сборки или Run All. Здесь я могу выбрать, какой тест запустить, настроить автоматический запуск при сборке и запустить / отладить один или несколько тестов. - person Ken Bonny; 28.10.2019