如何使用nosetests分别组织和运行单元测试与功能测试

11 投票
3 回答
3848 浏览
提问于 2025-04-17 05:49

我有一个典型的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

撰写回答