Python是否有首选的BDD样式单元测试框架?

时间:2014-06-02 00:35:13

标签: python unit-testing tdd bdd

我想知道是否有任何BDD风格的'describe-it'单元测试框架,用于维护和生产就绪。我找到describe,但似乎没有维护,也没有文档。我还发现sure达到1.0,但它似乎只是添加语法糖而不是写断言。我真正想要的是与RSpec和Jasmine类似的东西,使我能够设置测试套件。 describe-it语法允许测试函数的多个案例。与经典的断言结构相比,它可以测试每个函数一次并具有多个断言来测试多个案例。这打破了单元测试的隔离。如果有一种方法可以实现与断言式测试类似的东西,我会很感激有关如何做到这一点的任何建议。以下是两种风格的简单示例:

foo.py

class Foo():
    def bar(self, x):
        return x + 1

BDD-样式/描述-它

test_foo.py

describe Foo:
    describe self.bar:
        before_each:
            f = Foo()

        it 'returns 1 more than its arguments value':
            expect f.bar(3) == 4

        it 'raises an error if no argument is passed in':
            expect f.bar() raiseError

单元测试/断言式

test_foo.py

 class Foo():
     def test_bar(x):
         x = 3
         self.assertEqual(4)
         x = None
         self.assertRaises(Error)

2 个答案:

答案 0 :(得分:1)

如果你期望在python中有类似于rspec / capybara的东西,那么恐怕你会感到失望。问题是ruby为你提供了比python更多的自由(对开放类和广泛的元编程有更多的支持)。我不得不说python和ruby哲学之间存在根本区别。

如果你正在寻找纯粹的python解决方案,还有一些很好的测试框架,比如Cucumber(https://github.com/cucumber/cucumber/wiki/Python)和生菜(http://lettuce.it/)。

答案 1 :(得分:0)

我一直在寻找自己,并且遇到了mamba。结合流畅的断言库expects,它使您可以使用Python编写BDD样式的单元测试,如下所示:

from mamba import describe, context, it
from expects import *

with describe("FrequentFlyer"):
    with context("when the frequent flyer account is first created"):
        with it("should initially have Bronze status"):
            frequentFlyer = FrequentFlyer()
            expect(frequentFlyer.status()).to(equal("BRONZE"))

使用文档格式运行这些测试会为您提供类似Jasmine的测试报告:

> pipenv run mamba --format=documentation frequent_flyer_test.py

FrequentFlyer
  when the frequent flyer account is first created
    ✓ it should initially have Bronze status

1 example ran in 0.0345 seconds