【问题标题】:Importing CSV as test data in Cucumber?在 Cucumber 中导入 CSV 作为测试数据?
【发布时间】:2014-01-07 22:37:30
【问题描述】:

我们正在尝试将 CSV 合并到 Cucumber 中以获得 CSV 文件的好处,但在网上研究时,我没有看到有关此功能的官方文档,而只有“Import scenario outline 'examples' from CSV?”。

我不确定这是否得出任何结论。目前是否有在 Cucumber 中使用 CSV 的内置方式?

如果目前没有内置的方式来导入CSV,而我必须编写自己的解析方法,我想我的问题是,在步骤定义中,如何将变量与场景中的定义挂钩?例如:

Scenario: do something
    Given I eat number as <number> cucumbers
    and the cucumber is produced at date as <date>
    When the cucumber is expired
    Then I should have diarrhea

数据.csv

number,date
1,2012-01-01
1,2012-11-03

在steps.rb中,如果我这样做:

CSV.foreach("path/to/data.csv") do |row|
    ...

如何将row.number`row.date` 映射到功能文件中的数字\日期?

【问题讨论】:

    标签: ruby cucumber


    【解决方案1】:

    为了在 cucumber 中使用示例功能,我认为您必须进行一些重要的元编程,这可能会降低功能的可维护性和可读性。我可能会通过将您当前的步骤包装在另一个步骤定义中来实现这一点,如下所示:

      Scenario: do something
        Given I load some data
        Then expired cucumbers should give me diarrhea
    

    以及定义步骤定义

    Then 'I load some data' do
      @data = []
      CSV.foreach("path/to/data.csv", headers: true) do |row|
        @data << row
      end
    end
    
    Then 'expired cucumbers should give me diarrhea' do
      @data.each do |row|
        step %Q|I eat number as #{row[:number]} cucumbers|
        step %Q|the cucumber is produced at date as #{row[:date]}|
        step %Q|the cucumber is expired|
        setp %Q|I should have diarrhea|
      end
    end
    

    唯一的问题是,如果一个场景失败,可能需要额外的调试步骤来确定哪个场景失败。由于这些步骤或多或少是在幕后运行的。您可以通过将步骤定义中的行打印到 STDOUT 来轻松完成此操作:

    Then 'expired cucumbers should give me diarrhea' do
      @data.each do |row|
        puts "row", row.inspect
        step %Q|I eat number as #{row[:number]} cucumbers|
        step %Q|the cucumber is produced at date as #{row[:date]}|
        step %Q|the cucumber is expired|
        setp %Q|I should have diarrhea|
      end
    end
    

    这应该让您知道哪一行给您带来了麻烦。

    Erata:我理解您希望能够将数据表与功能分开维护,以便像项目经理这样的人可以提出边缘案例,然后让这些案例与代码的行为相悖。但我几乎更愿意允许他们在 github 上编辑该功能并允许 CI 运行他们添加到示例表中的那些示例,而不是采用这种方法。在任何一种情况下,它都可能对回归有好处,但开发代码可能真的很痛苦。这种类型的测试有点像http://fitnesse.org/ 的目标,这可能是一个启发你的项目。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-24
      • 1970-01-01
      • 2012-04-14
      • 2021-09-20
      • 1970-01-01
      • 2018-09-21
      相关资源
      最近更新 更多