********** Unit Tests ********** Unit tests are small isolated tests that target a specific library or module. .. contents:: Topics Available Tests =============== Unit tests can be found in `test/units `_, notice that the directory structure matches that of ``lib/ansible/`` Running Tests ============= Unit tests can be run across the whole code base by doing: .. code:: shell cd /path/to/ansible/source source hacking/env-setup ansible-test units --tox Against a single file by doing: .. code:: shell ansible-test units --tox apt Or against a specific Python version by doing: .. code:: shell ansible-test units --tox --python 2.7 apt For advanced usage see the online help:: ansible-test units --help Installing dependencies ======================= ``ansible-test`` has a number of dependencies , for ``units`` tests we suggest using ``tox`` The dependencies can be installed using the ``--requirements`` argument. For example: .. code:: shell ansible-test units --tox --python 2.7 --requirements apt .. note:: tox version requirement When using ``ansible-test`` with ``--tox`` requires tox >= 2.5.0 The full list of requirements can be found at `test/runner/requirements `_. Requirements files are named after their respective commands. See also the `constraints `_ applicable to all commands. Extending unit tests ==================== .. warning:: What a unit test isn't If you start writing a test that requires external services then you may be writing an integration test, rather than a unit test. Fixtures files `````````````` To mock out fetching results from devices, you can use ``fixtures`` to read in pre-generated data. Text files live in ``test/units/modules/network/PLATFORM/fixtures/`` Data is loaded using the ``load_fixture`` method See `eos_banner test `_ for a practical example. Code Coverage ````````````` Most ``ansible-test`` commands allow you to collect code coverage, this is particularly useful when to indicate where to extend testing. To collect coverage data add the ``--coverage`` argument to your ``ansible-test`` command line: .. code:: shell ansible-test units --coverage ansible-test coverage html