使用NUnit Console Runner和SpecFlow运行多个标签时,我得到的结果不正确

时间:2011-11-14 16:43:28

标签: tags categories specflow nunit-console

这是我之前关于设置代码的问题的跟进: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编写的,因此我不确定问题所在。

是否有人建议将测试设置为像这样运行?

1 个答案:

答案 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步骤设置您的测试环境。