Doctest Fixtures ---------------- Doctest files, like other tests, can be made more efficient or meaningful or at least easier to write by judicious use of fixtures. nose supports limited fixtures for use with doctest files. Module-level fixtures ===================== Fixtures for a doctest file may define any or all of the following methods for module-level setup: * setup * setup_module * setupModule * setUpModule Each module-level setup function may optionally take a single argument, the fixtures module itself. Example:: def setup_module(module): module.called[:] = [] Similarly, module-level teardown methods are available, which also optionally take the fixtures module as an argument: * teardown * teardown_module * teardownModule * tearDownModule Example:: def teardown_module(module): module.called[:] = [] module.done = True Module-level setup executes **before any tests are loaded** from the doctest file. This is the right place to raise :class:`nose.plugins.skip.SkipTest`, for example. Test-level fixtures =================== In addition to module-level fixtures, *test*-level fixtures are supported. Keep in mind that in the doctest lexicon, the *test* is the *entire doctest file* -- not each individual example within the file. So, like the module-level fixtures, test-level fixtures execute *once per file*. The differences are that: - test-level fixtures execute **after** tests have been loaded, but **before** any tests have executed. - test-level fixtures receive the doctest :class:`doctest.DocFileCase` loaded from the file as their one *required* argument. **setup_test(test)** is called before the test is run. Example:: def setup_test(test): called.append(test) test.globs['count'] = len(called) setup_test.__test__ = False **teardown_test(test)** is alled after the test, unless setup raised an uncaught exception. The argument is the :class:`doctest.DocFileCase` object, *not* a unittest.TestCase. Example:: def teardown_test(test): pass teardown_test.__test__ = False Bottom line: setup_test, teardown_test have access to the *doctest test*, while setup, setup_module, etc have access to the *fixture* module. setup_module runs before tests are loaded, setup_test after. .. note :: As in the examples, it's a good idea to tag your setup_test/teardown_test functions with ``__test__ = False`` to avoid them being collected as tests. Lastly, the fixtures for a doctest file may supply a **globs(globs)** function. The dict returned by this function will be passed to the doctest runner as the globals available to the test. You can use this, for example, to easily inject a module's globals into a doctest that has been moved from the module to a separate file. Example ======= This doctest has some simple fixtures: .. include :: doctest_fixtures_fixtures.py :literal: The ``globs`` defined in the fixtures make the variable ``something`` available in all examples. >>> something 'Something?' The ``count`` variable is injected by the test-level fixture. >>> count 1 .. warning :: This whole file is one doctest test. setup_test doesn't do what you think! It exists to give you access to the test case and examples, but it runs *once*, before all of them, not before each. >>> count 1 Thus, ``count`` stays 1 throughout the test, no matter how many examples it includes.