【问题标题】:Python Cucumber BDD package: Idiomatic way to inject the functionality that you would like to testPython Cucumber BDD 包:注入您想要测试的功能的惯用方式
【发布时间】:2020-04-14 13:43:26
【问题描述】:

我已经在 Udemy Here 上完成了使用 Python Cucumber 进行 BDD 的教程。

但是,在这些课程中,导师使用已实现的功能来实现步骤定义。对我来说,这违背了 BDD 的目的。我想在编写应该使测试通过的代码之前编写测试。

我尝试这样做的方法是使用配置文件,即Config.py:

myFunctionality = {
    "doMyThing" : lambda : assert(false)
}

然后在步骤实现文件中:

from Config import Config

@when('We request to do my thing')
def step_impl(context):
context.result = Config.myFunctionality.get("doMyThing")()

写完所有测试后,我可以编写doMyThing() 的逻辑,然后简单地编辑Config.py 文件,即:

From CoreLogic import CoreLogic

myFunctionality = {
    "doMyThing" : lambda : CoreLogic.doMyThing()
}

这意味着我可以对我的原型和最终实现使用相同的 Cucumber 测试集。我所要做的就是编辑配置文件。

这是解决这个问题的好方法吗?当然这是一个非常常见的用例,那么人们通常如何将他们想要测试的功能注入到 Cucumber 中?

谢谢。

【问题讨论】:

    标签: python python-3.x cucumber bdd gherkin


    【解决方案1】:

    步骤定义不是测试。黄瓜场景是测试。没有什么可以阻止您编写没有步骤定义的场景。

    某些 BDD 框架会因未实现的步骤而导致测试失败。为避免这种情况,请以这样的方式对每个新步骤进行存根,以便将测试标记为“待定”或“不确定”。这样,在您实施应用程序基础架构以支持步骤定义时,持续集成构建将继续通过。

    【讨论】:

    • Cucumber 将失败一个未实现的步骤。但这似乎仍然需要大量工作,每次更新应用程序基础架构时都必须记住更新步骤定义。
    • @Blue7:即使使用您提出的解决方案,您也在编辑某些内容。您只是没有更改步骤定义。您正在步骤定义和基础设施类之间构建一个层,如果您的基础设施更新,则需要更新该层。这是同样的问题,但是您正在引入另一层不必要的复杂性。如果您需要步骤之间的通用逻辑,您可以随时添加功能或使用您的基础设施类。不需要一个完全不同的层来存根功能。
    • 没错,你说得有道理。我只是想尽量减少更改的数量。我是黄瓜的新手,所以我还在学习什么是“好的设计”。
    猜你喜欢
    • 2016-08-27
    • 2011-03-08
    • 1970-01-01
    • 2010-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多