这是我之前关于设置代码的问题的跟进:Can I use tags in SpecFlow to determine the right environment to use?并根据这些代码设置变量:How to set up a URL variable to be used in NUnit/SpecFlow framework
我已经设置了一些变量来帮助填充我的NUnit测试,但我发现当NUnit运行器找到适合第一个标签的测试时,测试会使用第二个标签的设置运行它。由于标签对我来说很重要,不仅要知道要运行什么样的测试,还要知道要使用哪些变量,这会给我带来问题。
所以,如果我有以下标签:
@First
@first @second
@second
如果我运行@second一切都很好。如果我运行@first,我会得到任何只有@first罚款的场景,但是当涉及我同时拥有@first @second的场景时,运行场景,因为@first在那里,但它使用@second的参数。由于我通过NUnit-Console运行DLL并且测试是通过SpecFlow编写的,因此我不确定问题所在。
是否有人建议将测试设置为像这样运行?
答案 0 :(得分:1)
你不是很具体,但听起来你有这样一个功能文件:
@first
Scenario: A - Something Specific happens under the first settings
Given ...etc...
@second
Scenario: B - Something Specific happens under the second settings
Given ...etc...
@first @second
Scenario: C - Something general happens under the first and second settings
Given ...etc...
通过运行“第一”类别中的所有测试,您似乎正在选择要在NUnit中运行的测试。
如果你设置这样的事件定义:
[BeforeFeature("first")]
public static string FirstSettings()
{ ... }
[BeforeFeature("second")]
public static string SecondSettings()
{ ... }
如果您执行方案C,那么FirstSettings()
和SecondSettings()
将在它之前执行。这与您是否使用@second
类别选择要在NUnit下运行的测试无关。
这几乎可以肯定是您看到使用两个标签应用于测试的第二个设置 - 我希望第二个设置覆盖第一个设置,对吗?
我建立这样的测试的唯一建议是,绑定事件等对特定标记可能很有用,但应尽可能少地使用。而是使您的各个步骤定义可重复使用,并尽可能使用Given
步骤设置您的测试环境。