当前位置: 首页 > 知识库问答 >
问题:

Python是否有一个首选的BDD风格的单元测试框架?

吕亮
2023-03-14

我想知道是否有任何用于Python的BDD风格的“Description-it”单元测试框架可以维护并准备好生产。我已经找到了Description,但它似乎没有被维护,也没有文档。我还发现它达到了1.0,但它似乎只是添加了语法糖,而不是编写断言。我真正需要的是类似于RSpec和Jasmine的东西,它使我能够设置测试套件。descripe-it语法允许测试一个函数的多个情况。而传统的断言结构对每个函数进行一次测试,并有多个断言用于测试多个情况。这打破了单元测试的隔离。如果有一种实现断言式测试类似的方法,我希望得到任何关于如何实现的建议。下面是两种样式的简单示例:

class Foo():
    def bar(self, x):
        return x + 1
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)

共有1个答案

段干麒
2023-03-14

我自己一直在找这个,碰到曼巴。结合fluent assertion library Expect,它允许您用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
 类似资料:
  • 问题内容: 在Java(我敢肯定,在Java和其他社区中)之间存在着一个众所周知的争论,即是否应该测试简单的getter / setter方法。通常,这是关于代码覆盖率的。我们同意这是一个公开辩论,而不是在这里尝试回答。 有几篇关于使用Java反射来自动测试这种方法的博客文章。 是否有任何框架(例如jUnit)提供这种功能?例如,注释为“该测试T应该自动测试类C上的所有吸气剂/设置器,因为我断言它

  • 问题内容: 基本上,当测试中断或通过时,咆哮通知(或其他回调)。 像这样的东西存在吗? 如果没有,那应该很容易写..最简单的方法是.. 跑 检查要监视的文件是否已被修改(可能只是已保存)。 在这些文件中运行任何测试。 如果测试失败,但在上一次运行中通过,则生成咆哮警报。与失败然后通过的测试相同。 等待,然后重复步骤2-5。 我可以看到的问题是测试是否在其他文件中。一种简单的解决方案是在每次保存后运

  • 我正在研究像SpecFlow这样的BDD解决方案,并查看了各种示例,我看到了对其他TDD框架的引用,比如我熟悉的MsTest和NUnit。我理解Specflow和BDD提供的内容的价值。我在某处读到Specflow和BDD“包装”了您的单元测试。那么,对于Specflow来说,“步骤定义”是否与MsTest或Nunit一样起到同样的作用,而这些其他框架只是用来代替步骤定义的选项?

  • 问题内容: 如果该复选框已选中,那么我只需要将值设为1;否则,我需要将其设置为0。如何使用jQuery? 在这种情况下,总是会给我一项权利: 问题答案: 使用以确定它是否已选中,然后设置相应的值。

  • 我一直在学习用C++中的Google测试进行单元测试。 如果单元测试的目的是确保代码的某些段或对象按照预期的方式工作,那么我认为没有必要在最终项目中编译和导出单元测试代码,对吗?反正用户也不会使用它。它似乎使项目的规模变得不必要的大。 我的主要问题是:所有的单元测试代码会随最终项目一起编译导出吗,还是在导出之前我必须手动删除所有的单元测试? 对于单元测试和导出项目,是否有一个最佳的(或通用的)实践

  • 我不熟悉匕首。我创建了一个非常简单的单元测试,试图理解我应该如何使用dagger。不幸的是,它失败了。我可能还不了解匕首的一些基本原理。 而我的测试课失败了 我认为dagger会将B注入A,因为A希望注入B,DaggerModule包含一个@Providers注释方法,该方法创建B。 更新: 我发现当我像这样编写模块类时 将B注入A作品中。然而,我不理解为什么当模块有一个构造a实例的带注释的方法时