【问题标题】:Practicing BDD with python [closed]使用 python 练习 BDD [关闭]
【发布时间】:2010-09-18 21:13:20
【问题描述】:

有哪些最先进的框架和工具可用于 python 实践行为驱动开发?尤其是为 ruby​​ 找到类似于 rspec 和 mocha 的工具会很棒。

【问题讨论】:

  • Flowp "允许用最少的魔法以 RSpec BDD 风格编写测试"。
  • 只有在 SO 上,信息丰富才等于“没有建设性”。

标签: python testing bdd


【解决方案1】:

Ian Bicking 建议使用 doctest 进行行为驱动设计:

我个人倾向于在行为驱动的设计风格中使用nosevoidspace mock。具体来说,nose 的规范 plugin 非常适合 BDD。

【讨论】:

【解决方案2】:

我建议你使用一套工具来帮助程序员实践 BDD 和 TDD。该工具集由:pycukesspecloudludibrioshould-dsl 组成。

Should-DSL 会给你类似 RSpec 的期望。你可以用 RSpec 期望 API 做的所有事情,should-dsl 也可以。你可以抓住latestversion from Github

SpecLoud 帮助您运行类似 BDD 的单元测试。您可以通过以下方式安装它

pip install specloud

Ludibrio 是一个用于测试替身(Mocks、Stubs 和 Dummies)的库。通过

安装它
pip install ludibrio

PyCukes是BDD的主要工具。它将运行场景等。再次,

pip install pycukes

有关更多信息,请阅读PyPi 上的工具文档。

【讨论】:

  • 在寻找答案的详细信息时发现了这个有用的文档:arxiv.org/pdf/1007.1722
  • 我喜欢应该-dsl。我一直在考虑为 python BDD 使用 DSL - 有一些,这个似乎很有表现力。
  • 我无法找到有关名为 Pyramid 的 BDD 框架的任何信息。 @phaedrus 链接的论文中引用的链接指向一个看起来可疑的站点,该站点与测试没有任何关系,谷歌搜索指向 Web 框架 Pyramid。谁能提供最新的链接?
  • 我更喜欢 sure 断言 DSL。
  • @BjörnPollex,由于 Pyramid Web 框架,这些工具的创建者不能使用 Pyramid 这个名称。现在它们只是分离的工具。
【解决方案3】:

试试pyspecs。使测试易于阅读和发展过程中不断磨合中创建这个项目是我的两个主要目标。 P>

测试代码: H2>
from pyspecs import given, when, then, and_, the, this

with given.two_operands:
    a = 2
    b = 3

    with when.supplied_to_the_add_function:
        total = a + b

        with then.the_total_should_be_mathmatically_correct:
            the(total).should.equal(5)

        with and_.the_total_should_be_greater_than_either_operand:
            the(total).should.be_greater_than(a)
            the(total).should.be_greater_than(b)

    with when.supplied_to_the_subtract_function:
        difference = b - a

        with then.the_difference_should_be_mathmatically_correct:
            the(difference).should.equal(1)

控制台输出: H2>
# run_pyspecs.py

  | • given two operands 
  |   • when supplied to the add function 
  |     • then the total should be mathmatically correct 
  |     • and the total should be greater than either operand 
  |   • when supplied to the subtract function 
  |     • then the difference should be mathmatically correct 

(ok) 6 passed (6 steps, 1 scenarios in 0.0002 seconds)

【讨论】:

    【解决方案4】:

    您可以使用"sure" 进行表达性断言(就像在 RSpec 中一样)

    【讨论】:

    • 对羟基苯甲酸酯!你用 magic.py 中的代码完全让我大吃一惊。我不知道 Python 中可以使用“扩展方法”(开放类)。
    【解决方案5】:

    我真的推荐behave

    在寻找 Python 的 Cucumber 克隆时,我开始使用生菜,但发现它是一个设计非常笨拙的复制品。非常不符合标准。

    然后我发现了表现,并且对此非常满意。

    【讨论】:

    • 当我在 django 项目中使用默认数据库进行测试的默认行为使我失去了实时服务器上的生产数据库时,我从生菜切换到了行为 :( 我真的很喜欢行为;我已经开始django-behave 项目将其挂接到 django 的测试框架 github.com/rwillmer/django-behave
    • 我感受到了你的痛苦,也很高兴看到你的痛苦为 django 生态系统的繁荣做出了贡献。 ;-)
    • 我可以在没有功能文件的情况下使用行为吗?我没有非技术用户,所以写它们对我来说只是噪音。如果有人看不懂我的给定/何时/那么测试,他们就没有任何业务。
    【解决方案6】:

    很棒的帖子和答案。只是想更新以在此列表中包含Freshen,因为我读到 pycukes 已停产。一篇关于在 Freshen 中使用 BDD 和 Django 的好帖子是 here

    【讨论】:

      【解决方案7】:

      我非常喜欢Pyccuracy。这些天我正在一个中型项目上实施它。

      【讨论】:

      • 我对最近任何人都可以分享的 Pyccuracy 与生菜的比较感兴趣。
      • 也许在比较中也包括 Freshen(链接在上面的答案中)。
      • 已经在这里提问了:quora.com/…
      【解决方案8】:

      Lettuce的意思是成为python的类似黄瓜的工具:http://lettuce.it/

      您可以在 github.com/gabrielfalcao/lettuce 获取源代码

      【讨论】:

      • 考虑生菜的 Windows 用户应该知道,在撰写本文时,对该操作系统的支持并不简单。
      • 任何打算在 django 中使用 lettuce 的用户都应该知道,默认情况下,它使用您的 default 数据库进行测试。这个有趣的设计选择花了我一个生产数据库:(
      • 还有一些生菜的替代品,例如 Behave;这是a blog post comparing them, and advocating Behave
      • 感谢@seafangs - 对于大型项目,Behave 看起来比生菜更易于管理。
      • 如果您使用的是 django,请节省一些使用 Lettuce 的时间,当前版本 2.19 不适用于最新的 django。
      【解决方案9】:

      Pyccuracy 项目旨在为 Python 中的 BDD 提供特定领域的语言。

      与在 API 级别工作的 doctest 不同,它对更高级别的操作进行编码,例如加载网页和提交表单。我没有使用过它,但如果你正在寻找它,它看起来很有希望。

      【讨论】:

        【解决方案10】:

        我可能完全没有抓住重点,但我对 original BDD paper 的保留是 BDD 只是重新包装了 TDD 以强调一些最佳实践。

        如果我的解释是正确的,您可以通过在任何xUnit 实现中重命名方法来获得 BDD 框架。所以请继续使用标准库的unittest

        编辑:快速谷歌在Cheese Shop 中找到了Behaviour 模块。进一步 searching 对于 BDD 没有找到其他任何东西。

        【讨论】:

        • TDD 确实是一种革命性的实践,其规模与 BDD 完全不同。我仍然开始欣赏以 BDD 风格编写测试驱动的方式。
        • BDD 在单元级别启动,这是真的。它发展得相当迅速,涵盖了系统级行为,其中上下文、事件和结果受益于更多的可重用性——因此,支持从与非技术利益相关者的对话中捕获的自然语言场景的工具的激增。自从提出这个问题以来,我们已经将 BDD 提升到项目愿景级别,使用功能注入,同样强调通过对话和领域语言进行发现。日光之下仍无新鲜事。
        • 我喜欢这个关于 bdd youtube.com/watch?v=pherUEzdJow 的讨论。我展示了一种编写规范并将其作为测试的好方法。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-01-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-12-27
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多