我的商业用户喜欢使用当时的句子“它应该被创建”,其中它由场景的上下文决定。例如:
Given I have gift certificate for "<name>"
When I enter the gift certificate
Then It should be created
或
Given Customer order return for order "<order_no>"
When I create the customer order return
Then It should be created
在“然后应该创建”中,我想检索创建的礼品券或客户订单退货以进行比较。但是,它们具有完全不同的API和对象。
首先,有没有办法在Python Behave中执行此操作而不会出现“Exception AmbiguousStep:”?
如果没有,那么BDD世界中的最佳做法是什么,而不是强迫用户不得不经常说“然后应该创建礼券”或“然后应该创建客户订单返回”?
感谢。
答案 0 :(得分:1)
在你给我们的具体案例中,我会更详细地写下这些步骤以避免“它”。所以我会写“然后应该创建礼券”,等等。我宁愿避免让步骤依赖于通过context
传递的状态。
然而......
有时这样做会有问题。在您的情况下,也许与您的业务用户打交道的政治因此要求更多详细信息将无法顺利进行。或者可能存在技术原因导致我上面提出的建议不合需要或者说不可行。
如果您不能使用更详细的步骤,您可以执行的操作Then it should be created
步骤是否依赖于context
字段被设置为一个值,该值将为执行其执行的步骤提供足够的信息工作。它可能类似于context.created_object
。创建对象的步骤会将此字段设置为适当的值,以便Then it should be created
可以执行其工作。您在那里存储的具体内容取决于您的应用程序的具体情况。
对于我的一个应用程序,我在浏览器窗口中基于鼠标点击测试上下文菜单的外观,有时我记录的是对DOM元素的引用,用户在该元素上进行了右键单击菜单上。有时它是一个提供x,y坐标的对象。这是我的应用程序执行检查所需的。在这种情况下,最好让信息通过context
传递,因为在后续步骤中让Selenium再次查询DOM可能在网络上非常昂贵。通过几十个测试,它可以轻松地为测试套件的运行添加分钟,然后考虑该套件必须针对浏览器,操作系统和浏览器版本的多种组合运行。