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



这是我之前关于设置标签的问题的后续:我可以在SpecFlow中使用标签来确定使用的正确环境吗?如何设置一个URL变量在NUnit/SpecFlow框架中使用

我已经设置了一些变量来帮助填充我的NUnit测试,但是我发现当NUnit运行器找到适合第一个标记的测试时,测试用第二个标记的设置运行它。因为标签对我来说很重要,不仅知道要运行什么测试,而且知道要使用什么变量,这给我带来了问题。

如果我有以下标签:

@first

@first @second

@second

如果我运行@second,一切都很好。如果我运行@first,我会得到任何只有@first的场景,但是当我同时有@first @second的场景时,场景就会运行,因为@first在那里,但是,它使用@second的参数。由于我通过单元控制台运行DLL,并且测试是通过SpecFlow编写的,因此我不确定问题可能在哪里。

有没有人有建议设置测试像这样运行?

你没有非常具体,但听起来你有一个这样的功能文件:

@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...

通过运行"first"类别中的所有测试,看起来您正在选择要在NUnit中运行的测试。

如果你像这样设置事件定义:

[BeforeFeature("first")] 
public static string FirstSettings() 
{ ... }
[BeforeFeature("second")] 
public static string SecondSettings() 
{ ... }

如果执行场景C,则FirstSettings()SecondSettings()将在其之前执行。这与您是否使用@second类别来选择要在NUnit下运行的测试无关。

这几乎肯定是您看到第二个设置应用于两个标签的测试的原因-我希望第二个设置覆盖第一个设置,对吗?

对于设置这样的测试,我的唯一建议是,将事件等绑定到特定的标签可能是有用的,但应该尽可能少使用。相反,让您的单个步骤定义可重用,并在可能的情况下,使用Given步骤设置您的测试环境。

最新更新