simpletap

Unittest runner producing Test Anything Protocol (TAP) output


License
MIT
Install
pip install simpletap==2.0.0

Documentation

SimpleTAP

simpletap is a test runner that integrates with the unittest framework to produce TAP (Test Anything Protocol) compatible output.

Usage

In your test scripts, instead of:

if __name__ == "__main__":
    unittest.main()

use:

if __name__ == "__main__":
    from simpletap import TAPTestRunner
    unittest.main(testRunner=TAPTestRunner(buffer=True))

A small test case like:

import unittest

class IntegerArithmeticTestCase(unittest.TestCase):
    def testAdd(self):  # test method names begin 'test*'
        "test adding values"
        self.assertEqual((1 + 2), 3)
        self.assertEqual(0 + 1, 1)

    def testMultiply(self):
        "test multiplying values"
        self.assertEqual((0 * 10), 0)
        self.assertEqual((5 * 8), 40)

    def testFail(self):
        "a failing test"
        self.assertEqual(0, 1)

    @unittest.expectedFailure
    def testExpectFail(self):
        "we saw this coming"
        self.assertEqual(0, 1)

    @unittest.expectedFailure
    def testUnexpectFail(self):
        "someone fixed it already"
        self.assertEqual(0, 0)

    @unittest.skipIf(True, "Skipping this one")
    def testSkip(self):
        "pending a fix"
        self.assertEqual(0, 1)

    def testError(self):
        "oops something went wrong"
        no_such_variable + 1  # Oops!

if __name__ == "__main__":
    from simpletap import TAPTestRunner
    unittest.main(testRunner=TAPTestRunner(buffer=True))

When saved in a file called test.py and executed would produce:

1..7
ok 1 - test.py: test adding values
not ok 2 - test.py: oops something went wrong
# ERROR: NameError on file test.py line 38 in testError: 'no_such_variable + 1  # Oops!':
#        name 'no_such_variable' is not defined
ok 3 - test.py: we saw this coming # TODO
# EXPECTED_FAILURE: AssertionError on file test.py line 24 in testExpectFail: 'self.assertEqual(0, 1)':
#                   0 != 1
not ok 4 - test.py: a failing test
# FAIL: AssertionError on file test.py line 19 in testFail: 'self.assertEqual(0, 1)':
#       0 != 1
ok 5 - test.py: test multiplying values
ok 6 - test.py: pending a fix # skip
# SKIP:
#       Skipping this one
not ok 7 - test.py: someone fixed it already # FIXED
# UNEXPECTED_SUCCESS:
#                     testUnexpectFail (__main__.IntegerArithmeticTestCase)

You can also launch simpletap directly from the command line in much the same way you do with unittest:

python -m simpletap test.IntegerArithmeticTestCase

Testing

The test suite is configured to run via tox.

Projects

simpletap is currently being used by:

Changelog

2.0.0

  • skip keyword is no longer used. Now fully compliant with TAP using ok/not ok
  • SKIP now results in ok
  • EXPECTED_FAILURE now results in ok
  • UNEXPECTED_SUCCESS is now explicitly handled and results in not ok