【问题标题】:SpecFlow stop feature in case a scenario fails场景失败时的 SpecFlow 停止功能
【发布时间】:2014-09-06 11:25:22
【问题描述】:

我最近开始在 WPF C# 应用程序中使用 SpecFlow 进行 UI 测试。我有一个运行一系列链式场景的功能,我想知道如果一个场景失败,是否有办法停止执行该功能。我知道如果调试可以停止执行,但我想知道是否可以在运行时停止它。我一直在考虑尝试在 [AfterScenario()] 方法中阻止它。这个可以吗?

[AfterScenario()]
public static void After()
{
    if (TestContext.CurrentContext.Result.State != TestState.Success)
    {
        //stop feature from going to the next scenario
    }
}

【问题讨论】:

  • 我闻起来很香。听起来您对场景有顺序依赖,这最终可能会给您带来问题。你可以做一些along these lines 的问题和答案附带的警告。我相信你会更好地让每个场景独立。
  • 如果您的测试由其他测试运行者运行怎么办? Specrun 和 ncruch 都将并行运行测试,这将在您的情况下中断。构建服务器上使用的运行器也可能以不同的顺序运行它们。例如,Team City 似乎按字母顺序运行测试。
  • 你能举一个例子来说明你是如何将这些场景链接在一起的吗?这可能有助于了解您的用例。
  • 测试涉及将多个对象引入一个新的数据库(每次功能运行时重新创建 -1 次)。场景大纲的每次运行都会将一个元素添加到数据库中,并返回成功或失败的消息。现在我知道插入什么时候应该通过,什么时候应该失败,但是如果一个测试意外失败,该功能会继续运行并且元素计数的断言失败。在这种意外情况下,我希望整个场景停止。我知道这可能不应该在实践中使用,但我想知道是否可以停止场景。

标签: c# wpf specflow


【解决方案1】:

使用Feature Context,您可以让每个句子都以这样的开头...

Given Previous tests did not fail

在这句话中,您验证当前特征上下文没有错误值。这可能看起来像这样......

bool testsPass = FeatureContext.Current["TestsPass"];
Assert.IsTrue(testsPass);

您必须记住在任何断言之前设置此值。顺便说一句,这可能看起来像这样......

bool testPassed = //something to test
FeatureContext.Current["testsPass"] = testPassed;
Assert.IsTrue(testPassed);

正如评论所说,通常期望场景始终以特定顺序运行并不是一个好主意。根据跑步者的不同,他们可能不会像预期的那样做。

注意:再看一遍,BeforeScenario 可能效果更好,但我仍然建议使用@serial 标签或其他东西来表明它正在做的事情。

【讨论】:

    【解决方案2】:

    我不知道是否可以停止整个功能运行,毕竟 specflow 所做的只是在您选择的框架中生成测试,然后由某个测试运行程序运行。我所知道的任何单元测试运行器都不会允许在失败时完全中止所有其他测试。但这并不意味着你想要的东西是不可能的。

    我可以想办法“伪造”你想要的东西,但这是个坏主意。您可以在 AfterScenario 中设置某种标志(例如在磁盘上创建文件或设置互斥锁),然后在 BeforeScenario 中检查此标志并快速失败(显示类似“检测到先前故障时跳过测试”之类的消息)如果标志存在。您可以清除 BeforeFeature 上的标志以确保测试始终以干净的方式开始。

    就像我说的那样,我认为这是一个坏主意,你应该重新考虑你的测试是如何工作的。

    根据您上次评论中提供的额外信息,即使您为该功能重新创建数据库,然后在干净的数据库上运行多个场景,实际上每个场景都需要自己的干净数据库。你不能为每个场景创建一个新的数据库,然后让一个场景在给定的情况下创建它需要的所有数据,然后只测试一个东西吗?从长远来看,这似乎更具可扩展性和可维护性。

    我之前做过类似的事情,并为每个场景创建了一个新的数据库,它工作正常。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-15
      • 1970-01-01
      • 1970-01-01
      • 2019-04-06
      • 2018-09-24
      • 1970-01-01
      相关资源
      最近更新 更多