标签: specflow

如何在Visual Studio中为.feature文件突出显示Gherkin语法?

默认情况下,没有突出显示功能,场景,给定,时间,然后等关键字.是否有现成的模板来启用它?

.net bdd syntax-highlighting specflow gherkin

8
推荐指数
2
解决办法
4712
查看次数

Specflow的可选参数

我如何才能最好地处理这样一个事实:我的许多步骤应该将0,1或甚至2个日期作为"第一个参数"?例如,我如何最好地支持Specflow中的可选参数

最简单的情况是,只要步骤发生在彼此之后,日期就无关紧要了

 Given Peter was born 23-06-1973
 And Peter created an account
 And Peter deposited $200
Run Code Online (Sandbox Code Playgroud)

通常,很多步骤都与时间有关,例如

 Given Peter was born 23-06-1973
 And at 1-4-2012 Peter created an account
 And at 13-4-2012 Peter deposited $200
Run Code Online (Sandbox Code Playgroud)

在其他时间有两个日期,例如实时日期和发生事件的日期.例如.彼得填写了14-4-2012的印刷表格以进行汇款,但表格丢失了几天,我们今天需要记录表格已于几天前填写.

 Given Peter was born 23-06-1973
 ...
 And at 16-4-2012 really at 14-4-2012 Completed a transfer form to transfer $100 to account 12345 
Run Code Online (Sandbox Code Playgroud)

c# bdd specflow

8
推荐指数
2
解决办法
9324
查看次数

尝试生成测试执行报告时,specflow失败

我有一个项目正在使用SpecFlow,NUnit和Coypu对Web应用程序进行验收测试.我在构建服务器上通过Jenkins建立了项目.Jenkins调用psake脚本在specs项目上运行msbuild,然后脚本调用nunit-console来运行specs/tests,然后我想从SpecFlow生成一个报告.

Framework "4.0"

task Default -depends RunSpecs

task BuildSpecs {
    $env:EnableNuGetPackageRestore = "true"
    msbuild /t:Rebuild ReturnsPortal.Specs.csproj
}

task RunSpecs -depends BuildSpecs {
    exec { & "C:\path\to\NUnit 2.5.9\bin\net-2.0\nunit-console-x86.exe" /labels /out=TestResult.txt /xml=TestResult.xml .\bin\Debug\TheWebApp.Specs.dll }
    exec { & "C:\path\to\SpecFlow\1.8.1\specflow.exe" nunitexecutionreport TheWebApp.Specs.csproj /out:SpecResult.html }
}
Run Code Online (Sandbox Code Playgroud)

最后一次对specflow.exe的exec调用失败,但是:

元素<UsingTask>下的元素<ParameterGroup>无法识别.C:\ Program Files(x86)\ Jenkins\jobs\TheWebApp\workspace\Web\Sites\TheWebApp.nuget \nuget.targets

一些谷歌搜索暗示可能是使用msbuild版本的问题(例如这里,这里).但是Framework "4.0"我的psake脚本中,Specs项目的目标是.NET Framework 4.0,它在构建步骤中构建得很好,所以我不确定为什么specflow似乎使用了早期版本的msbuild.或者也许是其他地方的问题?

msbuild specflow

8
推荐指数
1
解决办法
6669
查看次数

SpecFlow:ClassInitialize和TestContext

首先,我是SpecFlow的新手.

我有一个功能文件,我已经/想要自动使用MSTest作为功能测试运行,涉及完全设置的服务器,数据访问......为此,我必须使用SpecFlow的'Given'中的数据配置服务器阻止并在之后启动它.我还必须将一些文件复制到测试的输出目录中.

在非SpecFlow功能测试中,我使用ClassInitialize属性从TestContext获取TestDeploymentDir; 这样的事情:

[ClassInitialize]
public static void ClassSetup(TestContext context)
{
  TargetDataDeploymentRoot = context.TestDeploymentDir;
}
Run Code Online (Sandbox Code Playgroud)

现在有了SpecFlow,我不能再使用这个属性了,因为它被SpecFlow本身使用.确实存在一些新属性,例如BeforeFeature,它的行为类似但是它不会将TestContext作为参数传递.

我只需要访问TestContext的TestDeploymentDir,以便在真正推出我的功能测试服务器之前复制一些文件 - 没有SpecFlow就可以轻松实现,但使用SpecFlow几乎不可能.

如何处理这个问题?

有可能吗?

非常感谢您的建议!

罗伯特


环境:

  • Visual Studio 2012
  • SpecFlow 1.9.0.77

c# mstest specflow visual-studio-2012

8
推荐指数
2
解决办法
1万
查看次数

SpecFlow步骤的布尔参数

在SpecFlow中,我想检查步骤定义中是否存在字符串,此时我正在做一些笨重的事情,例如这个人为的例子:

[Given(@"Foo ( bar)?")]
public void GivenFoo(string bar)
{
    if (bar == " bar")
    {
        // do bar
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,我想做这样的事情:

[Given(@"Foo ( bar)?")]
public void GivenFoo(bool bar)
{
    if (bar)
    {
        // do bar
    }
}
Run Code Online (Sandbox Code Playgroud)

但是我不知道怎么样,这是可能的,如果可能的话怎么样?

c# specflow

8
推荐指数
2
解决办法
4912
查看次数

Specflow中的多维场景概述

我正在创建一个类似于下面的场景大纲(它是一个简化版本,但很好地说明了我的问题):

Given I have a valid operator such as 'MyOperatorName'
    When I provide a valid phone number for the operator 
    And I provide an '<amount>' that is of the following '<type>'
    And I send a request 
    Then the following validation message will be displayed: 'The Format of Amount is not valid'
    And the following Status Code will be received: 'AmountFormatIsInvalid'

Examples:
    | type      | description                     | amount |
    | Negative  | An amount that is negative      | -1.0   |
    | …
Run Code Online (Sandbox Code Playgroud)

bdd cucumber specflow gherkin

8
推荐指数
1
解决办法
3622
查看次数

Gherkin - 只需重复使用Given语句作为When语句......可以接受吗?

以下是三个示例BDD语句,可以帮助解释我的问题:

Scenario: User logs in
Given I am on the login screen
When I enter the valid username "myUsername"
And I enter the valid password "myPassword"
And I press the login button
Then I should see the login successful page

Scenario: User buys a product
Given I am logged into the system using username "myUsername" and "myPassword"
When I purchase the product "myProduct"
Then I should have "myProduct" in the product inventory
Run Code Online (Sandbox Code Playgroud)

VS

Scenario: User buys a product
Given I …
Run Code Online (Sandbox Code Playgroud)

bdd cucumber specflow gherkin behat

8
推荐指数
1
解决办法
4637
查看次数

BDD和微服务

我们的解决方案依赖于微服务.另一方面,我们的CIO希望我们在每个新功能上实施行为驱动开发.

是否可以在微服务架构中管理BDD?根据您的经验,对这样的架构采用BDD是一个好习惯,还是您认为我们应该直接看集成测试?

[编辑]

更确切地说,在我看来,BDD测试有望验证业务逻辑,而且只验证业务逻辑.在许多框架中,BDD测试场景由滑块持有者和DSL创建.BDD测试倾向于融合到独有的"基础设施无知"实践.另一方面,集成测试应该验证解决方案是否与目标基础架构匹配(它们是由DevOps完成的?),而只是验证基础架构.当业务功能在微服务上"分布"时,您应该在BDD测试环境中模拟几乎所有(基础设施和业务)(应该是本地环境),并且模拟业务会削弱您的目标.你认为这些做法兼容吗?

c# bdd distributed specflow microservices

8
推荐指数
1
解决办法
1063
查看次数

取消测试后清理

我目前正在通过visual studio进行测试.在运行所有测试之前,我会自动创建一组具有已知凭据的用户,并在运行结束时删除这些用户.但是,有时我需要在中途取消我的测试.在这些情况下,测试永远不会有机会进行清理,这意味着测试运行中遗留了虚假的用户信息,并可能导致下一次测试运行崩溃(当它尝试将用户信息添加到数据库中时).无论如何,即使测试被取消,还是强制visual studio/mstest运行清理方法?

我知道一个选项是进行测试检查并确保用户信息不存在,如果确实在创建新用户之前删除了它.但这仍然无法解决取消的测试运行留下不需要的测试数据的问题.

更新:

对于错误传达很抱歉,但是在测试开始时清理数据不是一种选择.我给出了一个非常简单的问题视图,但简单地说,我没有简单的方法来确保在测试开始时不存在测试数据.所有清理必须在测试结束时进行.

c# mstest visual-studio specflow visual-studio-2013

8
推荐指数
3
解决办法
1708
查看次数

生成错误:无法加载文件或程序集"Microsoft.Build.Framework,Version = 15.1.0.0"或其依赖项之一

当我尝试生成我的.feature文件时,我似乎随机得到以下错误.

偶尔我会更改或更改我的功能文件,并且此错误突然冒出:

#error Generation error: Could not load file or assembly 'Microsoft.Build.Framework, Version=15.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The system cannot find the file specified.
Run Code Online (Sandbox Code Playgroud)

我完全不知道如何解决这个问题 - 我尝试添加对程序集的引用,更改SpecFlow/NUnit的版本,但似乎没有任何工作.

擦除我的项目副本并从源代码控制中拉出它最初工作,然后再次发生.

以下是我安装的软件包的完整列表:

<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="Microsoft.AspNet.WebApi.Client" version="5.2.2" targetFramework="net461" />
  <package id="Microsoft.AspNet.WebApi.Core" version="5.2.2" targetFramework="net461" />
  <package id="Microsoft.Azure.KeyVault.Core" version="1.0.0" targetFramework="net461" />
  <package id="Microsoft.Data.Edm" version="5.8.2" targetFramework="net461" />
  <package id="Microsoft.Data.OData" version="5.8.2" targetFramework="net461" />
  <package id="Microsoft.Data.Services.Client" version="5.8.2" targetFramework="net461" />
  <package id="Newtonsoft.Json" version="9.0.1" targetFramework="net461" />
  <package id="NUnit" version="3.0.0" targetFramework="net461" />
  <package id="NUnit3TestAdapter" version="3.9.0" targetFramework="net461" …
Run Code Online (Sandbox Code Playgroud)

nunit specflow nunit-3.0 visual-studio-2017

8
推荐指数
1
解决办法
1591
查看次数