Python是否有兼容标准xUnit风格的单元测试框架?如果有,它是什么,在哪里可以找到,并且质量如何?
Python有几个测试框架,包括unittest
,doctest
和nose
。其中最像xUnit的是unittest
,其文档在Python.org上进行了记录。
我推荐使用nose。
它是最符合Python风格的单元测试框架。测试运行器可以同时运行doctest和unittest,因此您可以自由选择任何测试样式。
@Greg:PyUnit已经作为unittest
包含在标准库中。
我推荐使用 Nose。
安装相对简单后,您只需在项目文件夹中运行“nosetests”,Nose 就会找到所有测试并运行它们。我还喜欢插件的集合(覆盖率、GAE 等)以及直接从 Python 脚本中调用 Nose 的能力。
nose似乎是灵活性和便利性的最佳组合。它可以从一个框架中运行单元测试、文档测试、覆盖率(使用扩展)和类似于py.test的测试,并且表现出色。它足够受欢迎,已经在Komodo Edit上进行了一些IDE集成,我也不会惊讶在其他地方看到它。
我喜欢它的一个强烈原因:我几乎总是在使用其他框架编写更广泛的测试之前进行文档测试。这是因为对于基本测试,文档测试可以一箭双雕。您可以同时获得可执行的测试(尽管有时编写良好有点笨拙)以及API文档和交互式文档。当您使用命令行选项(--with-doctest)时,nose将使用捆绑的doctest扩展来运行这些测试。
我曾经非常喜欢py.test,但现在我更喜欢nose tests。虽然它们很相似,但是我喜欢将各种测试方法集成到一个框架下。当然,你的情况可能不同,但我建议在选择其他测试框架之前好好看看nose。如果你不熟悉py.test测试,也应该去了解一下。我认为它们非常棒,因为它们通常以一种易于调试的方式编写,而无需测试框架,这使得调试会话中涉及的系统更少。我发现这一点非常有价值,同时我认为它们比unittest测试更容易编写。
我从未使用过xUnit,所以无法告诉您框架在比较中是好还是坏,但这里是我编写的一个脚本,它使用了unittest框架(检查API是否按照预期工作)和doctest(检查我提供的示例是否有效)。
我的唯一问题是检查某些内容是否引发异常有点复杂(您必须传递一个引发异常的函数/lambda,而不仅仅是像框架的其他部分那样的命令本身)。除此之外,它可靠地执行其任务,并且已经包含在默认的Python发行版中相当长的时间。