编程语言
首页 > 编程语言> > php – 我可以使用其中一个场景作为我的元步骤,而不是在Context类中定义它吗?

php – 我可以使用其中一个场景作为我的元步骤,而不是在Context类中定义它吗?

作者:互联网

我需要定义元步骤,就像我在订单购物车中有一个项目.但是,不是在Context类中为此步骤创建定义,而是仅使用某些功能文件中的现有步骤.因为我已经有测试功能的场景添加项目到订购购物车.

有没有现成的解决方案?我认为它是非常流行的用例,并且必须比在Context类中定义元步骤有更好的解决方案.

解决方法:

简答:不.

我知道它可能看起来像一个非常有用的功能,但它会让你很快回复,导致步骤/场景之间不必要的依赖关系导致脆弱的测试.

解决方案是将您的上下文文件视为功能文件和PHP代码之间的桥梁.这意味着上下文文件方法很简短,并将大部分工作委托给其他对象.这样,上下文之间没有重复,您只需调用其他对象:

/**
 * @Given I open the product page
 */ 
public function iOpenTheProductPage()
{
    $this->productPage->open();
}

/**
 * @Given I add a :product to the cart
 */ 
public function iAddProductToTheCart($product)
{
    $this->productPage->addToCart($product);
}

/**
 * @Given I have an item in the cart
 */ 
public function iHaveAnItemInTheCart()
{
    // reuse
    $this->productPage->open();
    $this->productPage->addProduct('Behat t-shirt');

    // ... or put the items directly to the db!
}

此外,在实践中,根据我们正在测试的内容,将项目添加到购物车可能看起来有点不同.

如果您正在处理“添加到购物车”方案,您可能希望完成访问该页面并将产品添加到购物车的过程.

但是,如果您正在使用“在标题中查看迷你购物车”方案,则可以使用快捷方式使测试套件更快一些.在Givens中,当你说“鉴于我在购物车中有一个项目”时,你可能只是将一个项目直接放入数据库/会话/其中的任何内容.您可以买得起这种快捷方式,因为您已经在其他方案中将项目添加到购物车.

顺便说一句,如果您自动化测试Web应用程序,您会发现像page objects这样的模式非常有用.

标签:php,bdd,behat,gherkin
来源: https://codeday.me/bug/20190609/1207453.html