我想知道是否有任何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)
答案 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