SpecFlow - 带有 CreateSet 的表


CreateSet<T>是 Table 方法的扩展。它将表中的数据转换为一组对象。在水平对齐中对数据进行参数化是流行的技术之一。

我们可以用这种方法处理一行或多行数据。SpecFlow Assist Helpers包用于处理表。另外,我们必须将命名空间TechTalk.SpecFlow.Assist添加到我们的代码中。

CreateSet <T>方法根据 Table 中匹配的数据获取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# Class并搜索。从搜索结果中选择选项“类别” ,然后单击“添加”继续。

已创建文件夹

项目文件夹结构

文件夹结构

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 步骤中使用从功能文件中的表传递的数据来执行的。