- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我们有我们想从三个不同角度测试的代码:
因为我们不想写三次特性文件,所以似乎我们应该在步骤之间共享特性,但我不知道如何做到这一点,除了可能在 VS 项目之间共享文件,它有总是看起来有点,嗯,不稳定。
在项目之间共享特征文件是实现这一目标的最佳方式,还是有更明智的方法?
最佳答案
我知道很久以前有人问过这个问题,但我认为您想要的是可能的,据我所知,有几种方法可以实现。实际上,您真正想要的是一次定义该功能,但根据您是调用内部服务、公共(public) Web 服务还是 WebApp 来切换为该功能调用的步骤。在 mailing list for specflow 上讨论了解决此问题的各种方法。但它的要点如下(示例显示了 API 与 UI 方法,但我相信这同样适用于您的内部与网络服务与 webapp):
(感谢邮件列表中的 Oliver Friedrich)
您需要为每个您想要为步骤而变化的选项创建一个程序集,一个用于内部,一个用于 Web 服务,一个用于 Web 应用程序。您告诉 specflow 关于配置中的所有不同程序集,如下所示:
<specFlow>
<stepAssemblies>
<stepAssembly assembly="Tests.API" />
<stepAssembly assembly="Tests.UI" />
</stepAssemblies>
</specFlow>
然后在您的常见测试步骤中,您有一些 [BeforeTestRun]
步骤选择从哪个程序集加载步骤:
[Binding]
public class TestRunSetup {
// this method needs to be static
[BeforeTestRun]
public static void BeforeTestRun()
{
if (RunApiTests()) // <-- implement this method to choose whether to run the tests via your chosen method
{
Assembly.Load("Tests.API");
}
else
{
Assembly.Load("Tests.UI");
}
}
}
(感谢邮件列表中的 Gáspár Nagy)
尝试 generating the tests during the build .我不确定这将如何运作,但这是我们可以调查的领域。
(感谢邮件列表中的 Dan Mork)
如果您使用 SpecFlow 的依赖项注入(inject)功能,那么您可以创建一个接口(interface)来执行您想要执行的调用,并在一组通用步骤中使用它。然后您可以拥有该接口(interface)的 3 个实现,一个调用您的内部服务,一个调用 Web 服务,一个操作 Web 应用程序。剩下的就是将该接口(interface)的正确实现注入(inject)到 specflow 步骤文件中,这可以像这样完成:
// the abstract concept of the system that could be implemented with
Selenium, HttpClient, etc.
public interface IDocument
{
string Title { get;}
void Load();
}
// the steps that are executed when the scenarios from your feature
file are executed
[Binding]
public class Steps
{
private readonly IDocument _document;
public Steps(IDocument document)
{
_document = document;
}
[Given("something")]
public void GivenSomething()
{
// set up given state
}
[When("I view the document")]
public void WhenIViewTheDocument()
{
_document.Load();
}
[Then(@"the title should be ""(.*)""")]
public void Then(string title)
{
Assert.ArEqual(_document.Title, title);
}
}
// this is where the magic happens - get the dependency injection
// container and register an IDocument implementation
[Binding]
public class Dependencies
{
private readonly IObjectContainer _objectContainer;
public Dependencies(IObjectContainer objectContainer)
{
_objectContainer = objectContainer;
}
[BeforeScenario]
public void RegisterDocumentInterfaces()
{
// register the correct IDocument implementation - UI or API
}
}
这仍然留给你如何知道哪个问题实现注册。这将取决于你的具体情况解决方案,您的构建环境,您的测试执行环境,等等。一些选项...
BeforeScenarioAttribute
的标记参数ScopeAttribute
是可扩展的你创建一个子类并提供你自己的逻辑是否BeforeScenarioAttribute
方法被执行。 希望这会给你一些选择来做你想做的事。
恕我直言,第一个选项可能是最好的,尽管选项 3 也很不错。
关于c# - SpecFlow 功能可以在步骤之间共享吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9381350/
在 Visual Studio 中,当我输入特征文件时,如果该步骤尚不存在,它会突出显示。我想知道是否有可以在命令行中为 specflow 项目编写的命令,它可以为我提供已存在的所有步骤的列表? 最佳
场景大纲对于创建数据驱动的测试非常方便,但是场景的数量会随着示例的数量而增加。我已经养成了标记场景的习惯,以便更容易过滤我们应用程序的主要功能。 我想设置一个适用于所有主要用例的“冒烟测试”。其中一些
有没有办法用“显式”属性标记 Specflow 测试?我知道可以通过使用特殊标签@ignore 用“忽略”属性标记测试。 最佳答案 也许。 如果您查看生成的 xxx.feature.cs,您会看到它被
简而言之,我需要的是创建一个具有可重复步骤的场景大纲,而不必像我目前在下面所做的那样使用多个 AND 输入它: Scenario Outline: outline Given I am a u
如何在表格中传递空格? Background: Given the following books |Author |(here several spaces)
我有一个如下所示的 Specflow 场景 Scenario: I Shoot a gun When I pull the trigger Then It should expel a bullet
我想在 SpecFlow 功能中添加一些评论。 我收到以下错误: Custom tool error: Parsing error near '/*' 我尝试过以下方法: // comment /*
我从Techtalk了解到将步骤定义与特征耦合是一种反模式。不过,我想知道如何组织我的步骤定义,以便我可以在代码中轻松查看哪些步骤是一起进行的。 例如,我应该为每个功能创建一个代码文件,并为共享的步骤
我正在重构我们的 SpecFlow 实现的 BDD 测试。作为这项工作的一部分,我注释掉了大部分步骤定义。 当我运行测试时,我看到“未找到一个或多个步骤的匹配步骤定义”。消息。 但是,我不想等到测试实
如何配置 SpecFlow,使其不将计时信息显示为测试文本的一部分,例如 -> done: Steps.ThenIWillBeDeniedAccess() (0.0s) 干杯。贾斯。 最佳答案 结果我
我正在使用 SpecFlow 进行一些 BDD 式测试。我的一些功能是 UI 测试,所以他们使用 WatiN。有些不是 UI 测试,所以它们不是。 目前,我有一个 StepDefinitions.cs
我正在使用 SpecFlow,我想编写如下所示的场景: Scenario: Pressing add with an empty stack throws an exception Given
我的项目非常大,并且有大量的测试步骤。结果,当我编写“功能”文件时,我发现我的计算机停止了运转。在非常大的功能文件上,即使不输入任何内容,我的一个 CPU 内核也会最大化,并且性能会下降到输入非常滞后
如果您运行足够多次,我的 SpecFlow 测试会失败。如何进行现有的 SpecFlow 测试并使其运行无限次直到失败? (理想情况下,我想计算需要多少次。) 我最初的猜测是只调用测试脚本最终调用的绑
我已经编写了我希望在运行 specflow 测试之前执行的代码,以设置所有测试都需要的各种全局变量: namespace MyProject.IntegrationTest { public
我尝试使用 Specflow 编写一些功能。不幸的是,通过以下 URL 安装后,我无法在系统中的任何地方找到 techtalk.specflow.dll。 http://visualstudiogal
这是我们的验收测试之一的示例: Feature: Add an effect to a level In order to create a configuration As a user I wan
在我的功能文件中,IntelliSense 说有一个关键字叫 Scenarios .注意是复数。我已经倾注了documentation并且找不到任何对它的引用。任何人都可以解释它的用途以及如何使用它?
我们在我当前的项目中使用了 Specflow 和 WatIn 进行验收测试。客户希望我们改用 Microsoft coded-ui。我从未测试过编码的 ui,但从我目前看到的情况来看,它看起来很麻烦。
我希望能够在本地执行给定的 SpecFlow (Gherkin) .feature 文件,而无需进行编译。 因此工作流程将是(作为业务分析师或 QA 工程师): 1.修改.feature文件(使用预定
我是一名优秀的程序员,十分优秀!