testrunner handling of skipped tests

`unittest 2`_, which has been merged into Python 2.7 and Python 3.1, provides a way to “skip” tests: http://docs.python.org/2/library/unittest.html#skipping-tests-and-expected-failures

This feature is reported by the test runner.

>>> import os, sys
>>> directory_with_tests = os.path.join(this_directory, 'testrunner-ex-skip')
>>> from zope import testrunner
>>> defaults = [
...     '--path', directory_with_tests,
...     '--tests-pattern', '^sample_skipped_tests$',
...  ]
>>> sys.argv = ['test']

Show how many skipped tests has been run

By default, the runner displays how many tests has been skipped, as part of the result line:

>>> testrunner.run_internal(defaults + ["-t", "TestSkipppedNoLayer"])
Running zope.testrunner.layer.UnitTests tests:
  Set up zope.testrunner.layer.UnitTests in N.NNN seconds.
  Ran 1 tests with 0 failures, 0 errors and 1 skipped in N.NNN seconds.
Tearing down left over layers:
  Tear down zope.testrunner.layer.UnitTests in N.NNN seconds.
False

If tests has been skipped in a layer, they are reported in the layer’s status line, and in the total status line:

>>> testrunner.run_internal(defaults)
Running sample_skipped_tests.Layer tests:
  Set up sample_skipped_tests.Layer in 0.000 seconds.
  Ran 2 tests with 0 failures, 0 errors and 1 skipped in 0.000 seconds.
Running zope.testrunner.layer.UnitTests tests:
  Tear down sample_skipped_tests.Layer in 0.000 seconds.
  Set up zope.testrunner.layer.UnitTests in 0.000 seconds.
  Ran 1 tests with 0 failures, 0 errors and 1 skipped in 0.000 seconds.
Tearing down left over layers:
  Tear down zope.testrunner.layer.UnitTests in 0.000 seconds.
Total: 3 tests, 0 failures, 0 errors and 2 skipped in 0.034 seconds.
False

Show the reason why tests have been skipped

By changing the verbose level of the runner itself, you can get increasing number of information:

>>> testrunner.run_internal(defaults + ["-t", "TestSkipppedNoLayer"])
Running zope.testrunner.layer.UnitTests tests:
  Set up zope.testrunner.layer.UnitTests in N.NNN seconds.
  Ran 1 tests with 0 failures, 0 errors and 1 skipped in N.NNN seconds.
Tearing down left over layers:
  Tear down zope.testrunner.layer.UnitTests in N.NNN seconds.
False
>>> testrunner.run_internal(defaults + ["-t", "TestSkipppedNoLayer", "-vv"])
Running tests at level 1
...
 test_skipped (sample_skipped_tests.TestSkipppedNoLayer) (skipped)
...
>>> testrunner.run_internal(defaults + ["-t", "TestSkipppedNoLayer", "-vvv"])
Running tests at level 1
...
 test_skipped (sample_skipped_tests.TestSkipppedNoLayer) (skipped: I'm a skipped test!)
...