SpecFlow - 带有 CreateInstance 的表

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

SpecFlow Assist Helpers 包用于处理表。此外,我们必须将命名空间 TechTalk.SpecFlow.Assist 添加到我们的代码中。

功能文件中的表标题可以是任何名称,例如:KEY、VALUE。但是,第一列应指向属性的名称,第二列应指向其对应的值。

步骤 1:创建功能文件

有关如何创建功能文件的详细信息在章节 − 功能文件中进行了详细讨论。

Feature: User credential

Scenario: Login module
   When User types details
   | KEY      | VALUE          |
   | username | tutorialspoint |
   | password | pwd1           |
Then user should be able to login

步骤 2:创建 C# 文件以访问字符串对象

我们将在项目中创建一个新文件夹,并在其中放置一个 C# 文件。右键单击 SpecFlow 项目,然后单击 添加

选择选项 新建文件夹

字符串对象

将文件夹命名为 Utils

右键单击新创建的文件夹,然后选择选项 添加。 单击

新建文件夹

在搜索框中输入 C# 类 并搜索。从搜索结果中选择选项Class,然后单击Add继续。

New Folders

项目文件夹结构

Folder Structures

C# Class Implementation

using System;
using System.Collections.Generic;
using System.Text;
namespace SpecFlowProject1.Utils {
   class Class1 {
      public class Input {
         //Declaring string objects
         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 data with CreateInstance method using C# class method
         var i = t.CreateInstance<Utils.Class1.Input>();
         Console.WriteLine(i.Input1);
         Console.WriteLine(i.Input2);
      }
      [Then(@"user should be able to login")]
      public void ThenUserShouldBeAbleToLogin() {
         Console.WriteLine("User should be able to login");
      }
   }
}

步骤 4:执行和结果

选择 用户凭据 (1) 功能,然后单击 在视图中运行所有测试

定义文件

选择 登录模块场景,然后单击 为此结果打开其他输出链接

定义文件

定义文件

使用 CreateInstance 方法在 When 步骤中从功能文件中的表传递数据,执行场景。