dimanche 1 novembre 2015

How do I write Python unit tests for scripts in my bin directory

The Python unittest module seems to assume a directory structure for a project in which there's a project root level directory with the source code and tests under that directory.

I would like, however, to write Python scripts in my ~/bin directory and tests for it in another directory (say, ~/dev/tests). Is there a way for me to run the unit tests using the command line interface without setting my PYTHONPATH environment variable and creating __init__.py files and whatnot?

Here's a simple example demonstrating what I want:

~/bin/candy:

#!/usr/bin/env python

def candy():
    return "candy"

if __name__ == '__main__':
    print candy()

~/dev/tests/test_candy.py:

#!/usr/bin/env python

import unittest
import candy

class CandyTestCase(unittest.TestCase):

    def testCandy(self):
        candyOutput = candy.candy()

        assert candyOutput == "candy"

I notice that everything can be done conveniently if:

  • The two files are named with py extensions (candy.py and test_candy.py)
  • The two files are in the same directory
  • The test is run with the following in the directory of the tests: $ python -m unittest test_candy

Can I run python with the unittest module to do the following without setting anything in my environment explicitly:

  • My file under test does not have the py extension (just ~/candy).
  • I don't care if test_candy has py as an extension or not.
  • I want candy and test_candy.py to not share a common root (other than my home directory).

If that's not possible with a simple invocation of python -m unittest, what is the most simple way to accomplish this?

Aucun commentaire:

Enregistrer un commentaire