我想按照以下方式编写验收测试
given the first test has run
when I do this new test
then this new test passes
这是因为第一次测试将使数据处于有效状态以执行下一次测试
我可以在 Specflow 中执行此操作吗?
我想按照以下方式编写验收测试
given the first test has run
when I do this new test
then this new test passes
这是因为第一次测试将使数据处于有效状态以执行下一次测试
我可以在 Specflow 中执行此操作吗?
正如Sam所说,您可以使用 SpecFlow 执行此操作,但是我会质疑这对您的测试是否有好处。
如果您查看 Sam 到specflow wiki的链接,您可以看到他们的示例由Given
多个Given
s 组成。这对我来说是有道理的,因为Given
这是让测试进入一个非常特定的状态,以便可以针对它运行断言。它也没有副作用,因为理论上Given
s 不会失败。
但是,当我们编写Given
from When
s 时,这会引入测试处于错误状态的可能性,然后我们才能断言一切都是正确的。我承认,如果你只是简单地Given
用另一个的步骤组成一个,Scenario
这会得到缓解,因为原来的Scenario
会失败,因此你可以先解决这个问题,但你仍然必须找到那个失败的测试。想象一下,您在几年内构建了您的测试,并最终以这种方式编写了数千个测试。对基本场景进行了一项简单的重大更改,导致数千次测试失败,这使得找到真正的问题所在变得更加困难。
是的,您可以在 specflow 中执行此操作,但需要注意一点。这种方法不会运行一个场景,然后运行另一个,它将自己运行第一个场景,然后依赖的场景将再次运行第一个场景,然后是第二个场景。这些顺序可能不是确定性的。@ignore
一旦编写了依赖场景,我们就通过第一个场景避免了这个问题。由于无论如何第二个场景总是运行第一个场景,它的 d 并不重要@ignore
,因为第一个场景中的任何失败都会触发第二个场景中的失败。
我们为实现这一目标所做的工作如下:
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");
}
您需要确保包含步骤定义的类派生自Steps
specflow 中的基类,以访问Given
,When
和Then
方法:
[Binding]
public class MyStepClass: Steps
您可以在specflow wiki上找到更多信息