步骤匹配可以通过Scope确定: https://github.com/techtalk/SpecFlow/wiki/Scoped-bindings。 但这是静态机制。 有没有办法让这个机制动态化:
这就像范围机制+动态性的标签限制。
我在不同的页面上测试多个表的应用程序。我必须验证是否:
我在写:
When I am on Page1
Then I expect that table contains
| Column1Name | Column2Name | Column3Name |
| row1id | true | address |
| row2id | true | address |
When I do some change action on rows
| Column1Name |
| row1id |
Then I expect that table contains
| Column1Name | Column2Name |
| row1id | false |
| row2id | true |
我只有一个步骤定义“我希望该表包含”。 它验证步骤中提供的单元格。 此步骤用于不同页面和页面的不同页面。 这些页面显示了不同的业务对象,具有不同的列,但ui很常见。 如果没有这个,我将不得不为每个页面和每个列组合编写步骤。
但是,在“我希望该表包含”之前,应该采取一些特定的操作。 例如:
我不想明确地写它,因为它会使该场景因不必要的信息而过载。
答案 0 :(得分:0)
正如Sam Holder所写,这是不可能的,但我通过向Step类注入行为来实现它。 我使用SpecFlow.Autofac.SpecFlowPlugin将Behaviors注册为命名服务 https://github.com/gasparnagy/SpecFlow.Autofac 这是示例代码。实现要复杂得多。这只是草案。
有改变上下文密钥的步骤。与行为类相同。
public interface ITableBehavior
{
void Search(Table table);
}
[ContextKey("Page1")]
public class Page1Behavior : ITableBehavior
{
public void Search(Table table)
{
throw new System.NotImplementedException();
}
}
[ContextKey("Page2")]
public class Page2Behavior : ITableBehavior
{
public void Search(Table table)
{
throw new System.NotImplementedException();
}
}
[Binding]
public class Step
{
private ITableBehavior TableBehavior { get { return BehaviorResolver.Resolve<ITableBehavior>(); } }
[Then("I expcet that table contains")]
public void TableContains(Table table)
{
TableBehavior.Search(table);
//table contains implementation
}
}