他们say认为BDD的基本规则是:
一种情况,一种行为!
这很棒,但是事实是我得到了一个动作,该动作将触发系统中的许多不同事物。我必须验证所有这些事物都会发生。这是我的小黄瓜:
Scenario: Buying a single product to be delivered now
Given I am in the checkout page
When I checkout the order
Then the order should be created to the specified address
And the order should be set in pending state
And ops must be notified via a slack notification
And A shopper must be auto assigned the order via a push notification
And A retailer must be notified about the order via a push notification
And A transaction must be recorded in the payment gateway
And My wallet should be deducted by the payment amount
这看起来真的很丑。但是现在我不确定如何将其分开。进行背景操作似乎并没有效果,因为在后台,您只是为多种情况设置基础,其中每种情况在 和然后配对(在我的情况下,我使用的是Behat,分别使用which has, , when 和 then 背景之后的场景。
建议?
答案 0 :(得分:1)
除了@Stratadox的答案(按行为拆分方案)以外-Given
的步骤永远不要引用用户界面或用户旅程中的某个阶段。用户所在的页面与业务逻辑无关。
Given
步骤(如单元测试中的Arrange
步骤)用于将系统设置为给定状态。在Given
步骤中设置的状态确定结果(在Then
步骤中)
例如:
“应将订单创建到指定的地址”-由于客户正确输入其地址而可能发生此结果(在这种情况下,可能需要指定实际地址以便可以断言)在Then
步骤中)。
“我的钱包应扣除付款额”-为了断定在给您的钱包充电后系统处于正确状态,我们可能会检查某种数据持久性,并且还会检查具体数量。多少钱您在Given
步骤中指定的金额与该方案的结果直接相关
Scenario: Being charged the correct amount on successful purchase of product
Given I have £10 in my wallet
When I purchase a Toaster Oven for £4
Then I should have £6 left in my wallet
“必须通过推送通知为购物者自动分配订单”-这可以作为“成功购买”检查的一部分断言。它唯一取决于的是购买是否成功。而且,您可以将诸如“通知购物者,记录零售商通知的交易”之类的断言捆绑在一起-并给它们起一个名字,在您的方案中一行,例如:
Given Jon has the following items in his basket:
| Macbook Pro | £3000 |
When Jon checks out his basket
Then a purchase of "xyz" for £3000 by Jon should have gone through
这里的最后一步将暗示在后台进行三个声明。很好,因为每个人都知道“购买正在进行中”意味着什么
答案 1 :(得分:0)
最简单的解决方法是遵循您在问题中引用的建议:
一种情况,一种行为!
要实施此建议,只需将the肿的情况分成多个较小的情况。
例如:
<?php
$con=mysqli_connect('localhost','root','','u656325986_login');
$response=array('travel' => array());
$result=mysqli_query($con,"select * from travel");
if(mysqli_num_rows($result)>0){
while($row=mysqli_fetch_array($result)){
$response["travel"][] = $row;
}
$response["t"]=1;
echo json_encode($response);
}
else{
$response["message"]="not fonud";
echo json_encode($response);
}
?>
...等等。
在您的方案中,许多Scenario: Buying a single product to be delivered now
Given I am in the checkout page
When I checkout the order
Then the order should be created to the specified address
And the order should be set in pending state
Scenario: Notifying ops of the purchase
Given I am in the checkout page
When I checkout the order
Then ops must be notified via a slack notification
之间的关系并不密切。它们具有某种暂时的关系,因为它们都恰好在下订单后发生,仅此而已。
您甚至可以更进一步,考虑将它们归类为不同的功能。
毕竟,通知操作与处理付款是不同的功能,而付款处理又与库存计算不同。