我正在使用Python开发一个项目,使用Git进行版本控制,我已经决定是时候添加几个单元测试了。但是,我不确定最好的方法。
我有两个主要问题:我应该使用哪个框架以及如何安排测试?首先,我打算使用unittest,因为它内置于Python中,但如果有一个令人信服的理由更喜欢别的东西我会接受建议。第二个是一个更棘手的问题,因为我的代码已经有些混乱,有很多子模块和相对导入。我不确定测试代码的位置。另外,如果可能的话,我宁愿保持测试代码与其他所有代码分开。最后,我希望测试易于运行,最好使用单个命令行命令和最小路径设置。
大型Python项目如何处理测试?据我所知,通常有一个自动系统可以对所有新签入进行测试。他们是如何做到的呢?设置测试系统的最佳做法是什么?
答案 0 :(得分:2)
测试框架的选择主要是关于个人偏好,有一些普遍的:
通常的目录结构例如是:
- 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
很好,但是可能很难将单元测试添加到大型项目中。原因是单元测试与最小块的功能测试有关。
单元测试意味着使用许多彼此分开的小测试。除了代码的测试部分外,它们应该是独立的。
当单元测试添加到现有代码中时,通常仅添加它以测试被证明导致错误的孤立案例。添加的单元测试应使用未经修正的功能编写,以披露错误。然后应该修复错误,以便单元测试通过。这是第一个极端 - 仅将单元测试添加到失败的代码中。这是必须的。您应该始终为失败的代码添加单元测试,并且应该在修复错误之前执行此操作。
现在,如何将单元测试添加到不使用它们的大型项目中是一个问题。单元测试的代码数量可能与项目本身的大小相当。这种方式另一个极端可能是将单元测试添加到一切。但是,这工作太多了,您通常必须逆向工程自己的代码才能找到要测试的构建块。
我建议找到代码中最重要的部分,并为它们添加单元测试。