Let There Be Tests
==================

The **funniest** package needs some tests. These should be placed in a submodule of ``funniest.`` so that they can be imported, but won't pollute the global namespace.::

    funniest/
        funniest/
            __init__.py
            tests/
                __init__.py
                test_joke.py
        setup.py
        ...

The ``test_joke.py`` file is our first test file. Although it's overkill for now, we'll use a ``unittest.TestCase`` subclass to provide infrastructure for later development.::

    from unittest import TestCase

    import funniest

    class TestJoke(TestCase):
        def test_is_string(self):
            s = funniest.joke()
            self.assertTrue(isinstance(s, basestring))

The best way to get these tests going (particularly if you're not sure what to use) is `Nose <https://nose.readthedocs.org/en/latest/>`_. With those files added, it's just a matter of running this from the root of the repository::

    $ pip install nose
    $ nosetests

To integrate this with our ``setup.py``, and ensure that Nose is installed when we run the tests, we'll add a few lines to ``setup()``::

    setup(
        ...
        test_suite='nose.collector',
        tests_require=['nose'],
    )

Then, to run tests, we can simply do::

    $ python setup.py test

Setuptools will take care of installing nose and running the test suite.