默认情况下,没有突出显示功能,场景,给定,时间,然后等关键字.是否有现成的模板来启用它?
我如何才能最好地处理这样一个事实:我的许多步骤应该将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) 我有一个项目正在使用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.或者也许是其他地方的问题?
首先,我是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几乎不可能.
如何处理这个问题?
有可能吗?
非常感谢您的建议!
罗伯特
环境:
在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)
但是我不知道怎么样,这是可能的,如果可能的话怎么样?
我正在创建一个类似于下面的场景大纲(它是一个简化版本,但很好地说明了我的问题):
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语句,可以帮助解释我的问题:
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) 我们的解决方案依赖于微服务.另一方面,我们的CIO希望我们在每个新功能上实施行为驱动开发.
是否可以在微服务架构中管理BDD?根据您的经验,对这样的架构采用BDD是一个好习惯,还是您认为我们应该直接看集成测试?
[编辑]
更确切地说,在我看来,BDD测试有望验证业务逻辑,而且只验证业务逻辑.在许多框架中,BDD测试场景由滑块持有者和DSL创建.BDD测试倾向于融合到独有的"基础设施无知"实践.另一方面,集成测试应该验证解决方案是否与目标基础架构匹配(它们是由DevOps完成的?),而只是验证基础架构.当业务功能在微服务上"分布"时,您应该在BDD测试环境中模拟几乎所有(基础设施和业务)(应该是本地环境),并且模拟业务会削弱您的目标.你认为这些做法兼容吗?
我目前正在通过visual studio进行测试.在运行所有测试之前,我会自动创建一组具有已知凭据的用户,并在运行结束时删除这些用户.但是,有时我需要在中途取消我的测试.在这些情况下,测试永远不会有机会进行清理,这意味着测试运行中遗留了虚假的用户信息,并可能导致下一次测试运行崩溃(当它尝试将用户信息添加到数据库中时).无论如何,即使测试被取消,还是强制visual studio/mstest运行清理方法?
我知道一个选项是进行测试检查并确保用户信息不存在,如果确实在创建新用户之前删除了它.但这仍然无法解决取消的测试运行留下不需要的测试数据的问题.
更新:
对于错误传达很抱歉,但是在测试开始时清理数据不是一种选择.我给出了一个非常简单的问题视图,但简单地说,我没有简单的方法来确保在测试开始时不存在测试数据.所有清理必须在测试结束时进行.
当我尝试生成我的.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)