我正在考虑为各种级别的测试设置 SpecFlow,作为其中的一部分,我希望能够过滤运行哪些测试。
例如,假设我想进行完整的 GUI 测试运行,我在开发环境中构建 GUI 测试的依赖项,并运行所有标记为@gui 的规范,并通过 gui 执行这些步骤。同样在同一个脚本中,我只想运行标记为@smoke 的测试,并设置部署环境所需的任何依赖项,并通过 api 执行这些步骤。
我知道您可以在通过 specflow 运行器运行时过滤标签,但我还需要更改每个测试在测试运行上下文中的工作方式。此外,我希望在构建服务器上运行时使用单个配置/命令行 arg 切换这种行为更改。
到目前为止,我的解决方案是为每种测试运行构建配置,并进行配置转换,这样我就可以在测试运行启动时将行为注入(inject)到 specflow 中。但我也不确定按标签过滤的正确方法。
我可以这样做:
[BeforeFeature]
public void CheckCanRun()
{
if(TestCannotBeRunInThisContext())
{
ScenarioContext.Current.Pending();
}
}
我认为这可行(它不会运行该功能),但测试仍会出现在我的测试结果中,如果我用我的标签过滤掉大部分测试,这会很困惑。是否有办法让我完全停止运行该功能?
最佳答案
简而言之,不,我不认为除了上面概述的内容之外,无论如何都可以做您想做的事。
如果测试只是普通的单元测试,您将如何排除这些测试的运行?
在 ReSharper 的运行器中,您可能会创建一个测试 session ,其中只包含您想要运行的测试。在 CI 服务器上,您只会在特定的 dll 或特定类别中运行测试。
Specflow 是一个单元测试生成工具。它以配置中指定的风格生成单元测试。运行者仍然必须决定运行哪些测试,因此上面选择要运行的测试的相同原则适用于 specflow 测试。
将它们放入类别中并仅运行这些类别是最简单的方法,但对其进行更细粒度的编程控制并不真正适用。您要求做的基本上就像说“运行此测试,但让我在测试中决定是否要运行它”,这实际上没有意义。
关于c# - 在特定条件下跳过 specflow 规范,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38608588/