我想按照
的方式写一份验收测试given the first test has run
when I do this new test
then this new test passes
这是因为第一次测试会使数据处于有效状态以执行下一次测试
我可以在Specflow中执行此操作吗?
答案 0 :(得分:2)
正如Sam所说,可以使用SpecFlow执行此操作,但我会质疑这对您的测试是否有益。
如果您查看Sam对specflow wiki的链接,您可以看到他们的示例是来自多个Given
的{{1}}。这对我来说很有意义,因为Given
正在将测试带入一个非常特定的状态,以便断言可以针对它运行。它也没有副作用,因为理论上Given
不能失败。
然而,当我们从Given
编写一个Given
时,这会引入测试处于错误状态的可能性,然后我们可以断言一切都是正确的。我承认,如果您只是使用另一个When
的步骤撰写Given
,这会因原始Scenario
失败而得到缓解,因此您可以先解决此问题,但您仍然可以必须找到失败的测试。想象一下,你在几年内建立了你的测试,最终以这种方式组成了几千个。对基本场景进行了一次简单的重大更改,数千次测试失败,使得查找真正问题的位置变得更加困难。
答案 1 :(得分:1)
是的,你可以在specflow中做到这一点,但有一点需要注意。这种方法不会运行一个场景,然后运行另一个场景,它将自己运行第一个场景,然后依赖场景将再次运行第一个场景,然后是第二个场景。这些顺序可能不确定。编写依赖方案后,我们通过@ignore
第一个方案避免了此问题。由于第二个场景始终运行第一个场景,因此@ignore
d无关紧要,因为第一个场景中的任何失败都会在第二个场景中触发失败。
我们为实现这一目标所做的工作是:
Scenario: Some base scenario
Given some condition
When some action
Then some result
然后在另一个功能中:
Scenario: Some dependant scenario
Given some base scenario has happened
And some other condition
When some other action
Then some other result
关键在于步骤Given some base scenario has happened
如果你这样定义这个步骤:
[Given("some base scenario has happened")]
public void SomeBaseScenarioHasHappened()
{
Given("some condition");
When("some action");
Then("some result");
}
您需要确保包含您的步骤定义的类派生自specflow中的基础Steps
类,以便访问Given
,When
和Then
方法:
[Binding]
public class MyStepClass: Steps
您可以在specflow wiki
上找到有关此内容的更多信息