use*_*391 11 code-reuse specflow
我正在尝试学习specflow,现在.目前我有2个功能文件.
在第二个功能文件中,我将重用第一个功能文件中的一个步骤.
Specflow会自动识别第一个功能文件中的步骤,当specflow为我的第二个功能生成步骤时,它很聪明,并且没有重新生成我重复使用的步骤.
但是这一步是给定步骤,它初始化要素类的成员字段.
在不使用场景上下文的情况下,如何重用初始化类成员的另一个功能文件中的步骤?
例如,如果您有一个已登录,则在多个功能文件中使用.此"Given"创建一个记录的用户对象,并将其作为成员存储在.cs功能文件中.
当您在另一个.feature中使用相同的Given时,Specflow不会在相应的.cs文件中重新生成它.当您调试正在使用它的场景时,它会从第一个.cs文件执行它.
但我无法访问第一个.cs功能文件的成员.我打算使用静态成员,但也许有另一种解决方案?
非常感谢.
AlS*_*Ski 17
这里的重点是Step Bindings是全球性的.这似乎是许多人经历的Specflow的常见反模式.最初,您有一个阶段,即创建与您的要素文件匹配的绑定类的层次结构.相反,您需要创建与功能不匹配的协作类,而是通过协作生成功能.
它就像你的主要应用程序代码.你不会有一个ATMMachineCashWithdrawal类,而是你有一个ATMMachine,有一个PINCodeCheck,一个OperationSelection和一个WithdrawalOperation.这些对象协作使您"我想提取现金"功能,当您添加"检查我的余额"功能时,您可以重复除了以外的所有内容WithdrawalOperation.
Specflow中的绑定是相同的.我们可能有一个ATMTester知道如何设置ATMMachine和供应您的知识,Given I have a cash machine full of cash并且您可以CustomerTester知道如何假冒/模拟/设置您的帐户余额Given my account has loads of money in it.
幸运的是,SpecFlow也提供了协作类的方法.看看http://www.specflow.org/documentation/Sharing$-between-Bindings/
小智 5
我只是有同样的问题。您需要为派生类设置属性“ Binding”,并为每个类设置范围。
假设您有2个功能:
功能:我的第二个功能
Feature: My First Feature
Background:
Given a precondition
When ...
Then ...
Feature: My Second Feature
Background:
Given a precondition
When ...
Then ...
Run Code Online (Sandbox Code Playgroud)并且您有一个BaseClass定义了共享行为
// no Binding attribute for the BaseClass
public class BaseClass
{
[Given(@"a precondition")]
public void GivenAPrecondition()
{
}
}
Run Code Online (Sandbox Code Playgroud)
然后是两个类,定义了这两个功能的行为
[Binding]
[Scope(Feature = "My First Feature")]
public class MyFirstFeature : BaseClass
{
}
[Binding]
[Scope(Feature = "My Second Feature")]
public class MySecondFeature : BaseClass
{
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13721 次 |
| 最近记录: |