如何使用nosetests分别组织和运行单元测试与功能测试
我有一个典型的Python项目文件结构
packageA
+----subpackage1
+----classa.py
+----subpackage2
+----classb.py
+----test
+----subpackage1
+----classa_test.py
+----subpackage2
+----classb_test.py
我现在想整理我的单元测试和功能测试,这样我就可以用nose分别运行单元测试和功能测试,同时也能选择运行所有测试。这些测试会放在packageA/test/subpackage1和packageA/test/subpackage2里。
- 有什么好的方法来组织这些不同的测试吗?是按文件夹(功能测试/单元测试)来分?还是按测试类的命名规则(ClassATest和ClassAFunctionalTest)?或者按测试方法的命名规则(classa_foo_test和classa_bar_functional_test)?
- 有没有人能解释一下nosetests的正则匹配是怎么工作的?我用的选项-m、-i和-e似乎没有按我预期的方式运行。这个正则表达式是匹配目录(subpackage1)、文件(classa_test)、测试类(ClassATest)还是测试方法(classa_foo_test)?我真的很困惑。
3 个回答
-2
我建议把测试按照功能区域来组织。其实我也不太了解nose是什么。
不过,比如说你在测试一个网页的登录区域,那就可以创建一个叫“login”或者“loginTests”的子文件夹;如果是测试菜单的话,就可以创建一个“menu”或者“menuTests”的文件夹。给测试和文件夹起个好名字也是很重要的,所以要把它们命名为它们实际测试的内容,越具体越好。
1
如果你正在开发Django项目,可以试试这个库:unclebob https://github.com/gabrielfalcao/unclebob
它提供了一种方法来组织和运行你的单元测试和功能测试。
9
我的测试目录结构是这样的:
root
+ --- tests
| + --- unit_tests
| | + --- some_app_tests
| | + --- another_app_tests
| | | run_tests.py
| |
| + --- integrate_tests
| + --- some_app_tests
| + --- another_app_tests
| | run_tests.py
|
+ --- project_root
+ --- some_app
+ --- another_app
对于每个应用,我都会创建一个对应的目录,里面有单元测试和集成测试。每个目录都是一个独立的 Django 项目,配有自定义的设置,并且有一个管理命令用来运行测试。
把测试放在一个目录里还有一个好处——当项目上线时,就没有必要把测试也一起上线。所以我只需要去掉一个目录,这样就可以了。
(我使用 django-sane-testing 来运行测试:https://github.com/Almad/django-sane-testing)