2

我正在使用 Python 开发一个项目,使用 Git 进行版本控制,我决定是时候添加几个单元测试了。但是,我不确定解决此问题的最佳方法。

我有两个主要问题:我应该使用哪个框架以及我应该如何安排我的测试?首先,我计划使用 unittest,因为它内置于 Python,但如果有令人信服的理由更喜欢其他东西,我愿意接受建议。第二个问题更棘手,因为我的代码已经有些杂乱无章,有很多子模块和相关导入。我不确定在哪里安装测试代码。另外,如果可能的话,我更愿意将测试代码与其他所有代码分开。最后,我希望测试易于运行,最好使用单个命令行命令和最少的路径设置。

大型 Python 项目如何处理测试?我知道通常有一个自动化系统来对所有新签入运行测试。他们是如何做到的呢?建立测试系统的最佳实践是什么?

4

2 回答 2

2

测试框架的选择主要是关于个人喜好,有一些普遍的:

  • unittest——它是 java 的 junit 框架的克隆,所以它的语法不那么 python-fendly
  • unittest2 — 一个特色单元测试
  • pytest — 全面复杂的框架,但是它的源代码有点吓人,所以如果你有任何问题有时很难找到解决方案
  • 鼻子——它从 pytest 发展而来,但更简单,也许你用鼻子是个好主意

例如,通常的目录结构是:

- project
| - module_name
  | - submodule.py
| - tests
  | requirements.txt
  | test_submodule.py
| - requirements.txt

最佳实践之一是使用 virtualenv:

 $ virtualenv env  # create virtualenv
 $ env/bin/activate  # activate virtualenv
 $ pip install -r requirements.txt  # install project requirements
 $ pip install -r tests/requirements.txt  # install testing requirements
 $ py.test  # if you use pytest
于 2012-08-06T05:44:46.627 回答
1

Pythonunittest很好,但可能很难将单元测试添加到大型项目中。原因是单元测试与最小块的功能测试有关。

单元测试意味着使用许多相互分离的小测试。除了代码的测试部分之外,它们应该独立于任何东西。

当单元测试被添加到现有代码中时,通常只添加它来测试被证明会导致错误的孤立案例。添加的单元测试应使用未更正的功能编写以揭示错误。然后应该修复错误,以便单元测试通过。这是第一个极端——只对失败的代码添加单元测试。这是必须的。您应该始终为失败的代码添加单元测试,并且应该在修复错误之前执行此操作。

Now, it is a question how to add unit tests to the large project that did not use them. The quantity of code of unit tests may be comparable with the size of the project itself. This way the other extreme could be to add unit test to everything. However, this is too much work, and you usually have to reverse engineer your own code to find the building blocks to be tested.

I suggest to find the most important parts of the code and add unit tests to them.

于 2012-08-06T06:09:51.420 回答