如何在Python中安排和设置单元测试

时间:2012-08-06 05:05:51

标签: python unit-testing

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

我有两个主要问题:我应该使用哪个框架以及如何安排测试?首先,我打算使用unittest,因为它内置于Python中,但如果有一个令人信服的理由更喜欢别的东西我会接受建议。第二个是一个更棘手的问题,因为我的代码已经有些混乱,有很多子模块和相对导入。我不确定测试代码的位置。另外,如果可能的话,我宁愿保持测试代码与其他所有代码分开。最后,我希望测试易于运行,最好使用单个命令行命令和最小路径设置。

大型Python项目如何处理测试?据我所知,通常有一个自动系统可以对所有新签入进行测试。他们是如何做到的呢?设置测试系统的最佳做法是什么?

2 个答案:

答案 0 :(得分:2)

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

  • unittest - 它是java的junit框架的克隆,所以它的语法不那么python-frendly
  • 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

答案 1 :(得分:1)

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

单元测试意味着使用许多彼此分开的小测试。除了代码的测试部分外,它们应该是独立的。

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

现在,如何将单元测试添加到不使用它们的大型项目中是一个问题。单元测试的代码数量可能与项目本身的大小相当。这种方式另一个极端可能是将单元测试添加到一切。但是,这工作太多了,您通常必须逆向工程自己的代码才能找到要测试的构建块。

我建议找到代码中最重要的部分,并为它们添加单元测试。