使用Specflow和JetBrains Rider无法将我的功能绑定到步骤

时间:2019-06-22 12:53:39

标签: specflow rider

我尝试遵循我在网上找到的一些指导,使用Specflow设置JetBrains Rider:

...感谢您提供Ken的文档。

但是,我无法让我的方案步骤链接到我的任何步骤文件。


设置

我相信我已经为最新版本的SpecFlow安装了所有必需的NuGet软件包

NuGet installed Specflow packages screenshot


我已经习惯了使用IntelliJ进行Cucumber开发,我们也可以使用SpecFlow C#Visual Studio,但是我只是无法获得连接到Rider中步骤的方案。

NB -我试图在Rider中使用的项目正在使用Specflow在Visual Studio中工作。

还有其他人能够赢得这场战斗吗?

我很想听听。

谢谢


更新 @肯 感谢您的建议。

我尝试了以下两种方法:

  1. 在.csproj文件中为feature.cs手动添加了 include 操作,但在构建后仍无法从功能到达步骤。
  2. 包含了Scope(Feature =“”)属性

但不幸的是,没有运气。

  

如果这不能解决您的问题,是否可以发布.feature和.steps.cs文件的内容。

根据建议,以下是在VS中正确映射的功能和step.cs文件的内容:

.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();
        }
    }
}

谢谢


更新-已解决

好的,首先,感谢Ken的帮助和指导。 按照Ken提供的步骤,创建一个新项目,并引发异常之后,我可以确认到step.cs绑定的.feature起作用。

肯,你是一个绅士和一个天才。谢谢。

其次,我错误地认为Rider将为我提供一种从.feature导航到Steps.cs代码(黄瓜JVM风格)的方式。我现在知道,Rider尚不支持此功能。

  • 这就是为什么我认为绑定无效! h

如果有人找到了将Rider gherkin映射到gherkin库的插件,我很想听听。


1 个答案:

答案 0 :(得分:0)

我想到的第一件事(我自己做了多次)是忘记您 .steps.cs 文件中的[Binding]属性。哦,您可能还想标记一个[Scope(Feature="")]属性,以免产生歧义。

您可以做的另一件事(如果使用的是SpecFlow 3.0及更高版本)是手动添加 .feature.cs 文件,看看是否可以解决您的问题。如果是这种情况,我会考虑检查 .csproj 文件是否具有.feature.cs文件的正确包含。<​​/ p>

如果这不能解决您的问题,是否可以发布 .feature .steps.cs 文件的内容。

编辑 我从头开始,这些是我采取的步骤:

  1. 创建新的解决方案
  2. 创建一个测试项目,选择NUnit作为测试框架
  3. 安装最新的SpecFlow.NUnit和SpecFlow.Tools.MsBuild.Generation
  4. nuget软件包(应为3.0.220版)(这将自动安装正确的SpecFlow nuget软件包)
  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:您的秘密身份对我很安全。 ;)