Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to organize and run unittests and functional tests separately using nosetests

I have the following typical python project file structure

packageA
   +----subpackage1
            +----classa.py
   +----subpackage2
            +----classb.py
   +----test
          +----subpackage1
                    +----classa_test.py 
          +----subpackage2
                    +----classb_test.py

I am currently trying to organize my unittests and functional tests so I can run unittests and functional tests separately using nose but also have the option to run all tests. The tests would live in packageA/test/subpackage1 and packageA/test/subpackage2.

  • What is a good way to organize the different tests? By folder (functional/ vs unit/) ? By naming convention of test class (ClassATest vs ClassAFunctionalTest)? or by naming convention of test methods (classa_foo_test vs classa_bar_functional_test)?
  • Can someone explain how nosetests's regex matching works? The options -m, -i and -e don't seem to run as I expect to run. Does the regex match directories (subpackage1), files (classa_test) or test classes (ClassATest) or test methods (classa_foo_test)? I am extremely confused
like image 715
sasker Avatar asked Nov 07 '11 22:11

sasker


People also ask

Which command is used to run nose tests?

nose can be integrated with DocTest by using with-doctest option in athe bove command line. The result will be true if the test run is successful, or false if it fails or raises an uncaught exception. nose supports fixtures (setup and teardown methods) at the package, module, class, and test level.


2 Answers

My tests directory structure looks this way:

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

For each individual app I create coresponding directory with tests in unit- and integrate- directory. Each is directory is separate django project with custom settings and there's management command used to run tests.

Also placing tests in one directory has one nice advantage - when project is deployed, there's no reason to deploy tests with it. So I just strip one directory and that's all.

(to run tests I use django-sane-testing: https://github.com/Almad/django-sane-testing )

like image 102
yedpodtrzitko Avatar answered Oct 06 '22 09:10

yedpodtrzitko


If you are developing Django project, you can try this library: unclebob https://github.com/gabrielfalcao/unclebob

It suggest a way how to organize and run your unit tests and functional tests.

like image 33
Matthew Lai Avatar answered Oct 06 '22 10:10

Matthew Lai