Python 是否有与标准 xUnit 风格的测试框架兼容的单元测试框架?如果是这样,它是什么,它在哪里,它有什么好处吗?
9 回答
Python 有几个测试框架,包括unittest
、doctest
和nose
. 最类似于 xUnit 的是unittest
,它记录在 Python.org 上。
我推荐鼻子。
它是最 Pythonic 的单元测试框架。测试运行器同时运行 doctests 和 unittests,因此您可以自由使用任何您喜欢的测试风格。
有testoob是非常完整的测试套件。还有 xUnit-ie,并且有一个不错的报告选项
@Greg:PyUnit 包含在标准库中unittest
考虑py.test。与 NUnit 不完全相似,但非常好,具有很好的功能,包括测试自动发现和“观察测试和代码 - 当发生变化时重新运行上次失败的测试。一旦所有测试通过,切换到运行所有每当事情发生变化时进行测试。” 选项。
我推荐鼻子。
在合理的简单安装之后,您只需在项目文件夹中运行“nosetests”,Nose 就会找到您的所有测试并运行它们。我还喜欢插件集合(coverage、GAE 等)以及直接从我的 Python 脚本中调用 Nose 的能力。
还有可能是您正在寻找的PyUnit 。
从未使用过 xUnit,所以我无法告诉您这些框架的优劣,但这是我编写的一个脚本,它使用 unittest 框架(检查 API 是否正常工作)和 doctest(检查我给出的例子)
我唯一的问题是检查引发异常的东西有点复杂(你必须向它传递一个引发异常的函数/lambda,而不仅仅是命令本身,就像框架的其余部分一样)。除此之外,它做了什么它应该可靠,并且它已经包含在默认的 python 发行版中很长一段时间了。
鼻子似乎是灵活性和便利性的最佳组合。它从一个框架运行单元测试、文档测试、覆盖率(带有扩展名)和类似 py.test 的测试,并且做得非常好。它有足够的受欢迎程度,它还为 Komodo Edit 完成了一些 IDE 集成,我也不会在其他地方看到它感到惊讶。
我喜欢它有一个很重要的原因:在另一个框架中编写更广泛的测试之前,我几乎总是先进行 doctest。这是因为,对于基本测试,doctests 用一块石头杀死两只鸟。您可以同时获得可执行测试(尽管有时写起来有点笨拙)以及 API 文档和交互式文档。当您使用命令行选项 (--with-doctest) 时,nose 将使用捆绑的 doctest 扩展运行这些。
我说这来自 py.test 作为我以前的最爱。虽然它很棒,但鼻子测试与我非常相似,我不会错过它,而且我喜欢将各种测试方法集成在一个屋檐下,可以这么说。YMMV,但我建议在选择另一个鼻子之前好好看看鼻子。如果你不熟悉 py.test 测试,你也应该看看它们。我发现它们很棒,因为它们通常以这样一种方式编写,无需测试框架即可轻松调试,这使得调试会话中涉及的系统不那么棘手。我发现仅此一项就非常宝贵,而在我看来,它们也比单元测试更容易编写。