SpecFlow не обнаруживает тесты, или я получаю сообщение об ошибке

Для начала: я новичок в Visual Studio и SpecFlow в целом.

Следуя документации по началу работы по SpecFlow, я получаю 2 разных результата в зависимости от того, какой тип проекта я начинаю.

Проект модульного тестирования: в этом типе проектов тесты вообще не распознаются исполнителем. Выполняется только тест "SpecRun Evaluation".

MSTest Test Project (.NET Core): в проектах этого типа тесты всегда проходят, но я получаю сообщение об ошибке в выводе тестов: «Значение не может быть нулевым. Имя параметра: сообщение», и это вызвано «генератором»

Все это я делаю на обычной Windows 10 Pro. Я пробовал как на VS 2017, так и на 2019. Я попытался повторить весь процесс на случай, если что-то пропустил. Также пробовал обновлять пакеты. Следует отметить, что проекты модульного тестирования не создают файл App.config.

using System;
using TechTalk.SpecFlow;

namespace Tests.Steps
{
    [Binding]
    public class CalculatorSteps
    {
        [Given(@"I have entered (.*) into the calculator")]
        public void GivenIHaveEnteredIntoTheCalculator(int p0)
        {
            Console.WriteLine(p0);
        }

        [Given(@"I have also entered (.*) into the calculator")]
        public void GivenIHaveAlsoEnteredIntoTheCalculator(int p0)
        {
            Console.WriteLine(p0);
        }

        [When(@"I press add")]
        public void WhenIPressAdd()
        {
            Console.WriteLine("add pressed");
        }


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

    }
}

Я бы очень ожидал, что тесты будут запущены и получу какую-то обратную связь, когда я намеренно выбрасываю исключение в тесте.

Все это просто задача для заявления о приеме на работу, но то, что я предоставил, - это файл функций по умолчанию, который создается, поскольку обе ситуации имеют такой результат. У меня уже есть идея, как выполнить задачу, и вот я застрял на настройке на несколько часов ... Я очень надеюсь, что это просто моя глупость / неопытность.

.csproj: https://codeshare.io/5zxk0W


person Martin Rashev    schedule 03.04.2019    source источник
comment
Вы упомянули .NET Core, поэтому я предполагаю, что вы используете версию 3 Specflow. В этой версии для настройки используется файл json, а не app.config. Попробуйте настроить Specflow в соответствии с этой страницей.   -  person Mika Sundland    schedule 03.04.2019
comment
@MikaS Спасибо, похоже, это не имеет значения, если только мне не нужно настраивать json, потому что он говорит, что это не что-то необходимое. Тесты до сих пор не распознаются, за исключением SpecRun Evaluation. Мне все еще нужно попробовать другой проект, надеюсь, он сработает   -  person Martin Rashev    schedule 03.04.2019


Ответы (1)


Это ответ для SpecFlow 2. *. При использовании SpecFlow 3 вам нужно только добавить в проект SpecFlow.Tools.MSBuild.Generation пакет NuGet.

Вы пропустили один шаг, чтобы включить интеграцию MSBuild.

Вы должны поместить следующий код в конец csproj в теге.

<Target Name="AfterUpdateFeatureFilesInProject">
    <ItemGroup>
    <Compile Include="**\*.feature.cs" Exclude="@(Compile)" />
    </ItemGroup>
</Target>

Это описано в https://specflow.org/2019/generating-code-behind-files-using-msbuild/ - Включение классической системы проектов MSBuild Code Behind Generation - Шаг 2

person Andreas Willich    schedule 04.04.2019