【发布时间】: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 次)。场景大纲的每次运行都会将一个元素添加到数据库中,并返回成功或失败的消息。现在我知道插入什么时候应该通过,什么时候应该失败,但是如果一个测试意外失败,该功能会继续运行并且元素计数的断言失败。在这种意外情况下,我希望整个场景停止。我知道这可能不应该在实践中使用,但我想知道是否可以停止场景。