SpecFlow - 带有 CreateSet 的表
CreateSet<T> 是表方法的扩展。它将表中的数据转换为一组对象。它是以水平对齐方式对数据进行参数化的流行技术之一。
我们可以使用此方法处理一行或多行数据。SpecFlow Assist Helpers 包用于处理表。此外,我们必须将命名空间 TechTalk.SpecFlow.Assist 添加到我们的代码中。
CreateSet<T> 方法根据表中匹配的数据获取 IEnumerable<T>。它具有所有对象的值。它确保从字符串到链接属性具有正确的类型转换。
步骤 1:创建功能文件
有关如何创建功能文件的详细信息在"功能文件"一章中进行了详细讨论。
Feature: User credential Scenario: Login module When User types details | Name | Password | | t1 | pwd | | t2 | pwd1 | Then user should be able to login
步骤 2:创建 C# 文件以访问字符串对象
我们将在项目中创建一个新文件夹,并在其中放置一个 C# 文件。右键单击 SpecFlow 项目,然后单击 添加。
选择选项 新建文件夹。
将文件夹命名为 Utils。
右键单击新创建的文件夹,然后选择选项 添加。 单击 类。
在搜索框中输入 C# 类 并搜索。从搜索结果中选择选项类,然后单击添加继续。
项目文件夹结构
C# 类实现
using System; using System.Collections.Generic; using System.Text; namespace SpecFlowProject1.Utils { class Class1 { public class Input { //two string objects declared public string Input1 { get; set; } public string Input2 { get; set; } } } }
步骤 3:创建步骤定义文件
有关如何创建步骤定义文件的详细信息,请参阅第 − 章"步骤定义文件"。
using System; using TechTalk.SpecFlow; using TechTalk.SpecFlow.Assist; namespace SpecFlowProject1.Features { [Binding] public class UserCredentialSteps { [When(@"User types details")] public void WhenUserTypesDetails(Table t) { //access Table data with CreateSet method var i = t.CreateSet<Utils.Class1.Input>(); //iterate over rows foreach (var r in i) { Console.WriteLine(r.Input1); Console.WriteLine(r.Input2); } } [Then(@"user should be able to login")] public void ThenUserShouldBeAbleToLogin() { Console.WriteLine("User should be able to login"); } } }
步骤 4:执行和结果
选择用户凭据 (1) 功能,然后单击在视图中运行所有测试。
选择登录模块场景,然后单击为此结果打开其他输出链接。
使用 CreateSet 方法在 When 步骤中从功能文件中的表传递数据,执行场景。