用python练习BDD [关闭]


133

python有哪些最先进的框架和工具可用于实践行为驱动开发?尤其是找到与rspec和mocha类似的工具来进行红宝石搜索将是很棒的。


1
Flowp “允许以最少的魔力以RSpec BDD样式编写测试”。
卡尔·G

7
只有在SO上,高度信息化才等于“非建设性”。
jeremyjjbrown 2014年

Answers:


38

Ian Bicking建议将doctest用于行为驱动的设计:

我个人倾向于以行为驱动的设计风格使用鼻子空隙模拟。具体来说,鼻子的规范插件非常适合BDD。


7
Andrew Bennetts最近写了几篇文章,介绍了为什么他认为doctest被滥用。andrew.puzzling.org/diary/2008/October/23/narrative-tests andrew.puzzling.org/diary/2008/October/24/more-doctest-problems
DDAA

4
我认为doctest在按预期方式对待BDD时,实际上与BDD的理念更加吻合:开始撰写有关该软件的内容,然后将其散布在同样构成测试的示例中。它也被描述为“文档驱动的开发”-重点是着眼于向外描述的功能,而不是内部工作单元。我认为传统的xUnit 在这样做,太可怕了。
ianb

48

生菜意味着要成为类似python的黄瓜类工具:http//lettuce.it/

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


考虑生菜的Windows用户在撰写本文时应该知道,对该操作系统的支持并非易事。
leonigmig 2011年

7
打算将莴苣与django一起使用的任何用户都应注意,默认情况下,它将使用您的默认数据库进行测试。这个有趣的设计选择花了我一个生产数据库:(
Rachel

3
生菜也有其他选择,例如行为。这是一篇博客文章,将它们进行了比较,并倡导Behave
2013年

1
感谢@seafangs-对于大型项目,行为看起来比Lettuce易于管理。
jamesc

如果您使用的是django,请节省使用Lettuce的时间,当前版本2.19不适用于最新的django。
林书豪

46

我真的建议您表现良好

在寻找适用于Python的黄瓜克隆时,我开始使用生菜,但发现它是一个笨拙设计的副本。非常不合常规。

然后我发现了行为,并对此感到非常满意。


11
当它在django项目中使用默认数据库进行测试的默认行为使我在实时服务器上的生产数据库消耗了生菜数据库时,我从生菜切换为行为: django的测试框架github.com/rwillmer/django-behave
Rachel

1
我感到您的痛苦,也很高兴看到您的痛苦促进了Django生态系统的蓬勃发展。;-)
John Wang

1
没有功能文件我可以使用行为吗?我没有非技术用户,所以写他们只是对我的干扰。如果某人无法阅读我给出的/何时/然后进行测试,那么他们就没有任何关系。
jeremyjjbrown 2014年

29

我建议您使用开发的一组工具来帮助程序员进行BDD和TDD的实践。该工具集由pycukesspecloudludibrioshould-dsl组成

Should-DSL将给您类似RSpec的期望。您可以使用RSpec期望API进行的所有操作,should-dsl也可以。您可以从Github获取最新版本

SpecLoud帮助您进行类似BDD的单元测试。您可以通过执行安装

pip install specloud

Ludibrio是一个用于测试双打(假人,存根和假人)的库。通过安装

pip install ludibrio

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

pip install pycukes

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


在寻找答案的详细信息时找到了这个有用的文档:arxiv.org/pdf/1007.1722
amit

我喜欢should-dsl。我一直在考虑python BDD的DSL-有一些,这似乎很有表现力。
丹尼·史泰普

我找不到有关称为Pyramid的BDD框架的任何信息。@phaedrus链接的论文中引用的链接指向一个看上去可疑的网站,该网站与测试没有任何关系,并且Google搜索指向Web框架Pyramid。谁能提供最新链接?
比约恩·波莱克斯(BjörnPollex)

1
我更喜欢肯定断言DSL。
fatuhoku

@BjörnPollex,由于Pyramid Web框架,这些工具的创建者无法使用Pyramid这个名称。现在它们只是分开的工具。
Douglas Camata 2013年

11

很棒的帖子和答案。只是想更新包括梳洗在此列表中,因为我读pycukes被中断。有关使用BDD和Django的与梳洗好后是在这里



8

Pyccuracy项目致力于为Python中的BDD提供特定领域的语言。

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



6

试用pyspecs。使测试易于阅读并在开发过程中持续运行是我创建此项目的两个主要目标。

测试代码:

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)

控制台输出:

# 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

我可能完全忘记了这一点,但是我保留的原始BDD论文是BDD只是重新包装了TDD,以强调一些最佳实践。

如果我的解释是正确的,则只需在任何xUnit实现中重命名方法即可获得BDD框架。因此,只需继续使用标准库的unittest即可

编辑:一个快速的谷歌在奶酪店里出现了一个行为模块。进一步搜索 BDD那里没有找到其他任何东西。


TDD实际上是与BDD完全不同的革命性实践。我仍然很欣赏以BDD风格进行测试驱动的编写方式。
JtR

1
BDD在单位级别启动,这是事实。它增长得很快,涵盖了系统级的行为,其中上下文,事件和结果得益于更多的可重用性-因此,支持该工具和从与非技术利益相关者的对话中捕获的自然语言场景的工具激增。自从提出此问题以来,我们已经使用功能注入将BDD提升到了项目视觉级别,并且同样强调通过对话和领域语言进行发现。阳光下仍然没有新事物。
鲁尼武尔2011年

我喜欢关于bdd youtube.com/watch?v=pherUEzdJow的讨论。我展示了编写规范并将其作为测试的一种好方法。
aisbaa 2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.