使用 CreateInstance 对表格单元格内容进行 Specflow 步骤参数转换

2023-12-01

有没有人解决了如何结合 SpecFlow.Assist CreateInstance/CreateSet 将 SpecFlow 步骤参数转换应用于表格中的单元格的难题? (这里合并代码以节省空间)

Given a table like the following:
 | Price | Zip   | Effective Date |
 | 10.00 | 90210 | in 2 days      |
When the 'given' step executes
And the table data populates a poco
Then the effective date should be transformed into a DateTime with value of 2 days from today

[Given(@"a table like the following:")]
public void GivenATableLikeTheFollowing(Table table)
{
    var temp = table.CreateInstance<Temp>();
}

internal class Temp
{
    decimal Price { get; set; }
    int Zip { get; set; }
    DateTime EffectiveDate { get; set; }
}

[Binding]
public class Transforms
{
    [StepArgumentTransformation(@"in (\d+) days?")]
    public DateTime InXDaysTransform(int days)
   {
      return DateTime.Today.AddDays(days);
   }
}

步骤参数转换绑定显然不适用于表格单元格内容(因为该步骤的参数是 Table 类型),但以某种方式 SpecFlow.Assist CreateInstance/CreateSet 仍会将单元格数据转换为基本类型。

例如,如果有效日期的内容是“11/13/2016”而不是“2 天后”,则底层 poco 的有效日期属性会很好地转换为 DateTime(或 int、decimal 等)。

我看到了一些其他解决方案,例如在步骤定义本身中应用转换,例如here或创建 StepArgumentTransformation对于整个表,但是...明显的缺点。更新:这个问题类似,但解决方案还避免将 StepArgumentTransformation 与 CreateInstance/CreateSet 混合在一起。

中还有一个部分SpecFlow 辅助助手有关通过注册值检索器/比较器进行扩展的文档,但在我的示例中,日期时间集已经存在。那么,也许是自定义 DateTime 类型?看起来也许可以检查已知类型的 StepArgumentTransformations 或类似的东西。

In the 日期时间检索器, 就像是..

    public virtual DateTime GetValue(string value)
    {
        var returnValue = DateTime.MinValue;
        // check for StepArgumentTransformations here first?
        DateTime.TryParse(value, out returnValue);
        return returnValue;
    }

关于在使用 table.CreateInstance 时我缺少将 StepArgumentTransformation 应用于表格单元格内容的任何想法?或者提到的解决方案之一是最好/唯一的方法吗?


我创建了一个小型原型,可用于重新配置 Assist 以便能够通过以下方式获取转换:[StepArgumentTransformation]绑定。

我的计划是写一篇关于它的博文,但在它准备好之前,也许你可以从这个要点中领悟到本质。 (我一年前为 SpecFlow v2.0 做过这件事,因此可能需要进行一些较小的调整。)

https://gist.github.com/gasparnagy/a478e5b7ccb8f557a6dc

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 CreateInstance 对表格单元格内容进行 Specflow 步骤参数转换 的相关文章

随机推荐

  • 实体框架 6:审核/跟踪变更

    我的核心项目是用 C 编写的 我在一个数据库上工作 其中一些表具有 user mod 和 date mod 列 用于标记谁以及何时制作了一些mod 并且与 data new 和 user new 相同 我的问题 有没有办法集中它并自动插入这
  • jquery ajax调用不是异步的

    我对 jQuery 的 AJAX 方法的实现很陌生 我有一个简单的设置 可以访问两个不同的页面 一个需要 10 秒才能完成 我在上面设置了一个计时器 另一个检查第一页的状态 这两个函数是progressCheck 它每秒请求其页面的最新状态
  • 使用邻接列表与邻接矩阵的图的大小?

    Suppose there are 236 web pages and on average each web page has 24 hyperlinks Consider the directed graph with one vert
  • 在 Python 中通过 Selenium 导航到新页面

    如何在 python 中使用与 Selenium 相同的驱动程序导航到另一个网页 我不想打开新页面 我想继续使用同一个驱动程序 我认为以下方法会起作用 driver navigate to https support tomtom com
  • 如何在 PHP 中构建跨数据库查询?

    在我们的最后一集中 我如何在 MySQL 中构建跨数据库查询 我学会了如何在MySQL中构建跨数据库查询 这很有效 但是当我们的英雄尝试在 PHP 中使用这些新知识时 他发现他最好的朋友失败了 我看了一下mysql select db对于
  • 如何在应用程序中的每个 MessageBox 处放置断点?

    如何在应用程序中的每个 MessageBox 处放置断点 在 Visual Studio IDE 中选择菜单Debug gt New breakpoint gt Breakpoint at Function 用文本 MessageBox 填
  • Retrofit 收到 400 错误请求,但与邮递员一起使用

    我的 api 基本网址是 https locodealapi herokuapp com api deals 在邮递员中 在标题中传递以下内容 效果很好 x access token eyJhbGciOiJIUzI1NiIsInR5cCI6
  • VBA - 如果 A 列中的单元格不为空,则 B 列等于

    我正在寻找一些代码来查看 A 列 只要 A 列中的单元格不为空 那么 B 列中的相应单元格将等于特定值 因此 如果 Cell A1 则 Cell B1 Value MyText 重复此操作 直到 A 列中的单元格为空白或为空 为了添加更多说
  • Mercurial - 添加不在存储库文件夹内的项目

    我是一个没有经验的 Mercurial 用户 我正在使用 VS2010 和 Mercurial 我让一切都在一个存储库上运行良好 该存储库包含一个解决方案文件和嵌套在 父 文件夹中的两个项目 每当我更改文件时 提交过程都会检测到更改等 然后
  • 如何为 Swing 中的 JTable 提供分页支持?

    我在 Swing Java 中创建了一个 GUI 其中使用了 JTable 现在我想通过使用分页在其中显示下一页信息 我该怎么做呢 实现此目的的另一个选项是使用无滚动条的滚动窗格和几个导航按钮来实现控制 已经添加的按钮都是正常的JButto
  • 如何从 Analytics Application Insights 获取 Qna Maker“Q”?

    我已经使用 Qna Maker 创建了聊天机器人的知识库 并尝试使用 Analytics Application Insights 可视化一些统计数据 我想做的事 我想创建一个图表 其中包含最常见的 Qna Maker 问题 我的问题 我在
  • 读取 React 应用程序 src 文件夹中的 excel

    我使用创建了一个反应应用程序react CLI 我现在创建了一个名为的文件夹data现在我想使用读取该数据xlsxnpm 包 但是 它不起作用 我认为这可能与我引用 Excel 文件的方式有关 因为我收到警告 字符串 类型上不存在属性 工作
  • 当我使用另一个控制器渲染页面时,表单验证停止工作

    我编写了一个快速 CI 库类来渲染我的页面 这样我就不必一直输入 this gt load gt view 并且保持 DRY 现在 当我在传递无效数据后重新呈现联系表单时 错误消息不会显示 图书馆类 class Page extends C
  • 如何让用户在 Laravel 5 中切换语言?

    我创建了一个双语 Laravel 5 应用程序 其中包含两个语言环境 en 和 ar 我想要的是网站访问者能够通过单击标有语言名称的链接来更改网站的语言 选项1 将用户语言存储在数据库中 我的用户语言存储在用户表中 这是为了避免用户每次登录
  • 如何使用 Win32::Console 读取特殊键?

    当我按下Up key 这个脚本 术语 术语密钥 输出You pressed
  • 如何停止EnumWindows无限运行win32

    该代码一直有效 不知何故 我设法让 Visual C Express 不会在最终返回语句上遇到断点 并且它似乎会永远运行 在下面的示例代码中 EnumWindows 无限枚举 在枚举完所有窗口后 如何才能使其停止 include
  • C# 剥离/转换一个或多个字符

    有没有一种快速的方法 无需显式循环字符串中的每个字符 并剥离或保留它 在 Visual FoxPro 中 有一个函数 CHRTRAN 可以很好地完成此任务 它采用 1 1 字符替换 但如果替代位置中没有字符 则会从最终字符串中删除该字符 前
  • 如何将 getSymbols(quantmod 库)中的数据存储到列表中?

    这是我正在运行的代码 library quantmod library tseries Stocks companies c IOC BO BPCL BO ONGC BO HINDPETRO BO GAIL BO for i in comp
  • 从代码隐藏或 XAML 中设置 NotifyIcon 控件中的图像

    我正在使用 WindowsForms 中的 NotifyIcon 因为在 WPF 中我们没有这样的控件 但 WinForms 中的控件工作正常 我的问题只是当图像位于项目中时将图像设置为 NotifyIcon 中的图标 我的项目中有一个名为
  • 使用 CreateInstance 对表格单元格内容进行 Specflow 步骤参数转换

    有没有人解决了如何结合 SpecFlow Assist CreateInstance CreateSet 将 SpecFlow 步骤参数转换应用于表格中的单元格的难题 这里合并代码以节省空间 Given a table like the f