我是第一次尝试Specflow,并创建了一个VS2010项目,引用了TechTalk.SpecFlow,以及nunit.framework.我添加了一个示例功能文件:
Feature: Addition
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
Run Code Online (Sandbox Code Playgroud)
当我执行测试(使用TestDriven.Net)时,我收到以下错误:
Test 'T:SpecFlowFeature1' failed: Couldn't find type with name 'SpecFlowFeature1'
System.Exception: Couldn't find type with name 'SpecFlowFeature1'
at MutantDesign.Xml.Documentation.MemberInfoUtilities.FindMemberInfo(Assembly assembly, String cref)
at …Run Code Online (Sandbox Code Playgroud) 我正在使用specflow指定我的应用程序,它只是让我从做非常糟糕的事情,所以我真的很喜欢它:-)但是我对步骤之间的耦合有问题:例如,因为我在一个人中使用模拟器我告诉模拟它应该返回一个实体,但在另一个我告诉模拟返回相同的实体,但与另一个属性.
看看这一步(从以下Darrens的答案中被盗并修改):
Given a guy the following guy exists:
| Name | Age | Salary |
| John Doe | 42 | 400 |
When his salary changes to 420
And I run the paycheck program
Then he should be paid 420
Run Code Online (Sandbox Code Playgroud)
看到这里我从一个Guy对象开始,然后修改对象 - 这是我正在测试的东西.
所以我将一个实体放入模拟存储库,然后在另一个步骤中将其拉出并再次放入.如何避免步骤之间的高耦合和可重用性?
当然,我可以在方案类中保留一个局部变量,并将所有实体放在该变量中,但我会将这些步骤结合起来.
我已经设法调整了我的SpecFlow测试的输出,以便它可以很好地读取,只需报告步骤和失败.但是,如果没有报告功能和场景名称,它仍然是不可读的.
查看生成的代码,看起来Feature和Scenario名称被编码为NUnit DescriptionAttributes.
我可以配置SpecFlow或NUnit来向stdout报告这些,所以我得到了一个非常流畅的"故事式"输出吗?
是否可以从SpecFlow(1.7.1)步骤绑定类中访问MSTest TestContext?在生成的特征文件代码中有一个方法FeatureSetup,它将TestContext作为参数,但显然不对它做任何事情.
我们正在使用specflow采用BDD.我们遇到的问题是不能期望产品所有者和管理者进入Visual studio/svn并编辑功能或场景.
我们可以让pm在Google文档中完成所有操作,然后我们可以将它们复制并粘贴到功能文件中,但这很容易出错并且会很快失去同步.
管理这个的最佳做法是什么?
我已经安装了specflow。默认情况下,我得到这种情况下要加上两个数字。构建解决方案时,出现这些错误。“方法'Given'的重载不接受4个参数”。我在这里想念什么?这是生成的文件。
public virtual void AddTwoNumbers()
{
TechTalk.SpecFlow.ScenarioInfo scenarioInfo = new TechTalk.SpecFlow.ScenarioInfo("Add two numbers", new string[] {
"mytag"});
#line 7
this.ScenarioSetup(scenarioInfo);
#line 8
testRunner.Given("I have entered 50 into the calculator", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "Given ");
#line 9
testRunner.And("I have entered 70 into the calculator", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And ");
#line 10
testRunner.When("I press add", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "When ");
#line 11
testRunner.Then("the result should be 120 on the screen", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "Then ");
#line hidden
this.ScenarioCleanup();
}
Run Code Online (Sandbox Code Playgroud)
对于这种情况:
功能:SpecFlowFeature1为避免愚蠢的错误作为数学白痴,我想被告知两个数字的总和
@mytag方案:将两个数字相加,因为我已经在计算器中输入了50,并且已经在计算器中输入了70。
我正在寻找一种方法来进行步骤定义,例如:
给出了1,2,3,4的数字集合
并使用int [],List或IEnumerable将其映射到步骤定义
正则表达式(\ d +(,\n +)*)匹配,但意味着我需要两个参数.
目前我有
[Given(@"a collection of numbers (\d+(,\d+)*)")]
public void givencollectionofnumbers(string p0, string p1)
{
//p0 is "1,2,3,4"
//p1 is ",4"
}
Run Code Online (Sandbox Code Playgroud)
我有一个简单的workarouns
[Given(@"a collection of numbers (.*)")]
public void givencollectionofnumbers(string p0)
{
var numbers = p0.Split(',').Select(x => int.Parse(x));
}
Run Code Online (Sandbox Code Playgroud)
但我想以更优雅的方式做到这一点,可能会将数字的类型改为双打,并确保正则表达式仅列出数字列表.
我也不想使用表格,因为对于简单的数据列表来说似乎过多了
有人能帮忙吗
这可能听起来很傻但是有没有办法格式specflow .feature文件?在.cs文件中我可以做ctrl + E ctrl + DI必须手动格式化我的表格,这是一项可怕的工作.
我不确定这是否与我的VS2013设置有关,但是Given,And和Then步骤根本不会崩溃和扩展.谢谢
如何只想在文本框中输入值,使用"Ctrl + a"从文本框中选择完整的文本,然后使用"Ctrl + c"复制它,然后使用"Ctrl + v"将其粘贴到同一个框中"使用Selenium + C#.
我安装了最新版本的SpecFlow,但功能文件显示仍然没有颜色,就像这样......
(插入图像的代表不够)
是否为Specflow文件中显示的颜色设置了某些配置?
VS2015 Specflow 2.1