0

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

我设置了一些变量来帮助填充我的 NUnit 测试,但我发现当 NUnit 运行程序找到适合第一个标签的测试时,测试会使用第二个标签的设置运行它。由于标签对我很重要,不仅要知道要运行什么测试,还要知道要使用什么变量,这给我带来了问题。

所以如果我有以下标签:

@第一的

@first @second

@第二

如果我运行 @second 一切都很好。如果我运行@first,我会得到任何只有@first 的场景,但是当涉及到我同时拥有@first @second 的场景时,场景会运行,因为@first 在那里,但是,它使用@second 的参数. 由于我通过 NUnit-Console 运行 DLL 并且测试是通过 SpecFlow 编写的,所以我不确定问题可能出在哪里。

有没有人有关于设置测试以这样运行的建议?

4

1 回答 1

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

于 2012-01-26T20:28:58.053 回答