场景大纲可以自动从文件系统生成数据吗?

时间:2016-02-23 12:31:10

标签: c# testing nunit specflow

我正在尝试运行一组步骤来测试给定文件夹中的文件处理。我希望能够看到每个已处理的文件结果,而不是执行第一次失败的结果。

没有为目录中的每个测试文件填充List的步骤,而是让步骤循环遍历此列表以处理每个文件,然后将输出与预期结果进行比较,我希望可以使用Scenario概述使我在测试中更具体。

例如,而不是:

# Feature Details ...
Scenario:
Given I have some data
When I process the data
Then I expect the output to be consistent

我想要像:

#Feature Details:
Scenario Outline:
Given I have a file <file>
When I process the data
Then I expect the output to be consistent
Example:
    | file |
    | [dynamically populate this list of files given a directory path] |

这甚至可能吗?

我可以指定类似的内容:

Example:
    <file> in [DirectoryInfo(path)].Files

或者:

Example:
    | file |
    | ScenarioContext.Current[FilesToTest] |

但我怀疑这是可能的,但我对C#和规范流程很陌生,所以我想在这里问一下以防万一。

1 个答案:

答案 0 :(得分:0)

你到底是什么问题?只是替换?使用相对于test runnning文件夹的目录,一切都应该正常工作。您可能必须创建包含数据的文件夹,为此,我的建议是将您要在测试中使用的数据作为资源文件包含在测试项目中,并让您的给定步骤创建必要的文件夹并填充它使用资源文件中的数据

修改

您无法在示例中动态生成文件列表,但您的步骤可以轻松地从路径中读取文件集合。

如果您的测试环境中已经存在这些文件,那么您可以选择一些选项。

如果您的文件始终位于相同的已知位置,则只需将此位置放在示例中,然后在步骤中您可以迭代这些文件。我将功能更改为:

#Feature Details:
Scenario Outline:
Given I have a many files in the folder <InputFolder>
When I process each of the files
Then I expect the output for each processsed file to the same as the results in <OutputFolder>
Example:
    | InputFolder    | OutpuFolder    |
    | c:\inputFiles\ | c:\outputFiles |

[鉴于(“我在文件夹中有很多文件(。*)”)] public void GivenIHaveManyFiles(string exampleLocation) {     List filesToProcess = new List();     foreach(Directory.GetFiles(exampleLocation)中的var文件)     {         filesToProcess.Add(file.FullName);     }     ScenarioContext.Current [“FilesToProcess”] = filesToProcess; }

如果(更有可能)文件位于每个环境或本地计算机上的不同位置,那么我可能会使用环境变量或某些配置。使用环境变量:

var location = Environment.GetEnvironmentVariable(exampleName);
foreach(var file in Directory.GetFiles(location))
{
    //use the file
}

这将要求您在每台服务器上设置环境变量,但CI可能会在构建设置中执行此操作(我们在TeamCity中执行此操作)。

您还可以让CI在测试运行开始之前创建一个包含文件位置的文本文件,然后读取此文本文件以获取测试中的位置。有很多方法可以给这只猫上皮。

这不是一个真正的specflow问题,只是想象你正在编写一个控制台应用程序来读取这些值,那么你会怎么做呢?