我正在使用SpecFlow来BDD我的应用程序。 我想迭代测试,而每次迭代都会重复之前指定的参数。
由于此步骤应执行约120次,我不想用不同的参数重写相同的测试。
是否可以仅迭代场景部分?
真实场景:
我有应用程序功能打开文件并关闭它。
我想打开和关闭文件,直到应用程序失败。
我制作的最后一个测试套件(使用纯C#代码)发现被测应用程序中的内存泄漏导致第10次迭代失败,仍然在调试测试的应用程序后,它在50次迭代时失败(同样由于内存泄漏)。
我想使用spec flow来测试这种情况。
出于记录原因,我想将每次迭代拆分为不同的场景。 因此,有没有办法让SpecFlow以递增的重复序列进行迭代,而不是编写包含许多子场景的特征文件?
情景:
Scenario Outline: Open and close fileTestScenario1
Given Ready for input
When Open file <file_name>
Then File content is visible
Examples:
| file_name |
| param1 |
| param2 |
| param3 |
所以我希望SpecFlow生成以下测试:
我知道那个场景是原子测试单元,但是,如果我想执行这个任务 - 它怎么能完成?
答案 0 :(得分:0)
如果您只是将测试标记为
,该怎么办?Scenario Outline: Open and close fileTestScenario1
Given Ready for input
When Open file <file_name>
Then File content is visible
Examples:
| file_name |
| param1 |
| param1,param2 |
| param1,param2,param3 |
使用绑定
[When("Open file (\w+)"]
public void WhenOpenFiles(string names)
{
foreach(var name in string.Split(',', names)
{
OpenFile(name);
}
}
然而,这种方法(称为穷尽测试)并不是接近测试的最佳方法。在这种情况下你所做的一切都是为了遇到问题而进行了大量的测试。至少减少测试,以便不是运行1个文件,而是2个文件,然后3个等,而是直接跳转到50个文件,因为这也处理更简单的情况。您还应该使用这种方法来简单地诊断真正的问题是什么,然后编写一个能够直接解决问题的目标测试。
例如,我今天遇到了一个失败的现有测试,它只是因为它是星期一而失败,即它有一些日期逻辑,只会在发生的某些TimeSpan
重叠期间失败在每个星期一。然而,我通过详尽的测试证明了这一点,
Foreach(var day in new[] { DayOfWeek.Monday, DayOfWeek.Tuesday, ....}
Foreach(var hour in Enumerable.Range(0, 24)
Console.Writeline(test(day, hour));
然后我删除了详尽的方法测试,因为我可以仅在周一上午10点用一次测试替换它。
希望这有帮助。