c# - 在超过 1 行 Specflow 中提供示例

标签 c# .net bdd specflow

当我在一行中提供示例时,效果很好。 当我提供多于一行的示例时,我遇到了绑定(bind)参数异常。如果我在一行中提供所有示例,则不容易阅读。

Feature: ConversionUnencrypted Pdf-Pdf
@mytag
Scenario Outline: ConversionUnencrypted Pdf-Pdf
    Given I get Inputs Folder and list of Files <inputFolder> then <getInputTokens>
    Given I get '<outputDirectory>'
    Given I get directory to save Images '<ImagesOutputDirectory>'

Examples: 
     | inputFolder                                                             | getInputTokens        | outputDirectory                                                                        | ImagesOutputDirectory                                                    |
     | D:\SVN_Projects\XDoc.Net\SpecFlow\Conversion\ConvertToPdf\Inputs\2files | Input1.pdf,Input2.pdf | D:\SVN_Projects\XDoc.Net\SpecFlow\Conversion\ConvertToPdf\AfterConvertingToPdf\2files  | D:\SVN_Projects\XDoc.Net\SpecFlow\Conversion\ConvertToPdf\Actual\2files  |
    Given I set saving  Mode <ConversionMode>
    Given I convert pdf using Conversion
    Given I convert to Image '<convertToFile>'
    Then I compare Images '<getActualImagePath>' and '<getExpectedImagePath>' and '<pageCount>'

    | ConversionMode      | convertToFile                                                                         | getActualImagePath                                                      | getExpectedImagePath                                                      | pageCount |
    | ConvertToSingleFile | D:\SVN_Projects\XDoc.Net\SpecFlow\Conversion\ConvertToPdf\AfterConvertingToPdf\2files | D:\SVN_Projects\XDoc.Net\SpecFlow\Conversion\ConvertToPdf\Actual\2files | D:\SVN_Projects\XDoc.Net\SpecFlow\Conversion\ConvertToPdf\Expected\2files | 82        |

如果示例如下所示,则可以正常工作:

Examples:
    | inputFolder                                                             | getInputTokens        | outputDirectory                                                                        | ImagesOutputDirectory                                                   | ConversionMode       | convertToFile                                                                          | getActualImagePath | getExpectedImagePath | pageCount |
    | D:\SVN_Projects\XDoc.Net\SpecFlow\Conversion\ConvertToPdf\Inputs\2files | Input1.pdf,Input2.pdf | D:\SVN_Projects\XDoc.Net\SpecFlow\Conversion\ConvertToPdf\AfterConvertingToPdf\2files\ | D:\SVN_Projects\XDoc.Net\SpecFlow\Conversion\ConvertToPdf\Actual\2files\|  ConvertToSingleFile | D:\SVN_Projects\XDoc.Net\SpecFlow\Conversion\ConvertToPdf\AfterConvertingToPdf\2files\ | D:\SVN_Projects\XDoc.Net\SpecFlow\Conversion\ConvertToPdf\Actual\2files |D:\SVN_Projects\XDoc.Net\SpecFlow\Conversion\ConvertToPdf\Expected\2files | 82                 |

最佳答案

您的第一个场景有一些问题。您将步骤与示例混合在一起。这些步骤必须位于场景大纲中,不能位于示例中。

鉴于此,如果您使用大纲中的步骤重新编写场景,那么它看起来将如下所示:

Feature: ConversionUnencrypted Pdf-Pdf
@mytag
Scenario Outline: ConversionUnencrypted Pdf-Pdf
    Given I get Inputs Folder and list of Files <inputFolder> then <getInputTokens>
    Given I get '<outputDirectory>'
    Given I get directory to save Images '<ImagesOutputDirectory>'
    Given I set saving  Mode <ConversionMode>
    Given I convert pdf using Conversion
    Given I convert to Image '<convertToFile>'
    Then I compare Images '<getActualImagePath>' and '<getExpectedImagePath>' and '<pageCount>'
Examples: 
     | inputFolder                                                             | getInputTokens        | outputDirectory                                                                        | ImagesOutputDirectory                                                    |
     | D:\SVN_Projects\XDoc.Net\SpecFlow\Conversion\ConvertToPdf\Inputs\2files | Input1.pdf,Input2.pdf | D:\SVN_Projects\XDoc.Net\SpecFlow\Conversion\ConvertToPdf\AfterConvertingToPdf\2files  | D:\SVN_Projects\XDoc.Net\SpecFlow\Conversion\ConvertToPdf\Actual\2files  |
     | ConversionMode      | convertToFile                                                                         | getActualImagePath                                                      | getExpectedImagePath                                                      | pageCount |
     | ConvertToSingleFile | D:\SVN_Projects\XDoc.Net\SpecFlow\Conversion\ConvertToPdf\AfterConvertingToPdf\2files | D:\SVN_Projects\XDoc.Net\SpecFlow\Conversion\ConvertToPdf\Actual\2files | D:\SVN_Projects\XDoc.Net\SpecFlow\Conversion\ConvertToPdf\Expected\2files | 82        |

现在,为什么不能在不同的行上有两组示例就变得更加明显了,因为看起来 inputFolder 的值为 ConversionMode,而实际上ConversionMode 是一个标题。

这里的主要问题是您的示例中有完整的文件路径。这是一个实现细节,恕我直言,删除这些路径并使用名字来代替会更好。毕竟,这些完整的文件路径不会在您的其他任何计算机上工作,也不会在构建服务器上工作。我会考虑像这样重写它们:

Examples:
    | inputFolder | getInputTokens        | outputDirectory | ImagesOutputDirectory | ConversionMode      | convertToFile | getActualImagePath | getExpectedImagePath | pageCount |
    | 2files      | Input1.pdf,Input2.pdf | 2files          | 2files                | ConvertToSingleFile | 2files        | 2files             | 2files               | 82        |

虽然这也有很多重复的信息,但现在它已经减少了,所以你的整个场景可以像这样重写

Feature: ConversionUnencrypted Pdf-Pdf
@mytag
Scenario Outline: ConversionUnencrypted Pdf-Pdf
    Given I am processing files in the subdirectory <workingFolder> of the input folder then <getInputTokens>
    And I save file to the subdirectory <workingFolder> of the output folder
    And I save Images to the subdirectory <workingFolder> of the images folder
    And I set saving  Mode <ConversionMode>
    And I convert pdf using Conversion
    And I convert to Image the files in the subdirectory <workingFolder> of the output folder
    When I compare Images of page '<pageCount>' in the subdirectory <workingFolder> of the actual image folder and subdirectory <workingFolder> of the expected image folder
    Then the images should be the same 
Examples:
    | workingFolder | getInputTokens        | ConversionMode      | pageCount |
    | 2files        | Input1.pdf,Input2.pdf | ConvertToSingleFile | 82        |

然后您的基本文件夹可以相对于您的项目进行创建并作为测试构建的一部分进行部署,也可以保存在配置中。

关于c# - 在超过 1 行 Specflow 中提供示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30893972/

相关文章:

c# - 如何使用 C# 将数组的元素插入到 SQL Server 数据库中?

c# - 设置文件访问规则

wcf - 如何解锁 FileStream 锁?

javascript - 使用 Protractor 在 ng-repeat 中获取 ng-model

c# - 小 cucumber 功能无法将任何方法与步骤匹配

c# - Linq 中嵌套选择的替代方法

c# - 如何将 BUTTON 值插入数据库

c# - 如何使用 Entity Framework 6 通过 IN 语句执行原始 sql

c# - 字典中对象的默认值

ruby-on-rails - 如何使用 Cucumber 在页面中测试一个、多个或无图像?