Self documenting unit test

When you write unit test case with python unittest module and run the test,          by default it prints the testcase name (module name)...status.

test_is_even_number (test_math_util.TestMathUtil) ... ok

----------------------------------------------------------------------
Ran 1 test in 0.002s

OK

If you have a couple of testcases for a given function, these print statement will not provide much information as to which test case is successful or failed.

What if these tests are self documenting . When they run, they document which testcase is successful / failed. something similar to this -

test_is_even_number (test_math_util.TestMathUtil)

                test for odd number
                 ... ok
test_is_even_number_2 (test_math_util.TestMathUtil)

                test for even number
                 ... ok

----------------------------------------------------------------------
Ran 2 tests in 0.003s

OK

Here, I ran two test for even and odd number and the log statement shows the testcase for which it failed or successful. This may be helpful since by looking at the log statement, you can find out what happened.

How to do this

In your test class, you just need to override shortDescription method to return _testMethodDoc as given in the example below. that's all is required.

def is_even_number(number):
	return number%2 == 0
math_util.py
import unittest
import math_util

class TestMathUtil(unittest.TestCase):
	def shortDescription(self):
		return self._testMethodDoc

	
	def test_is_even_number(self):
		"""
		test for odd number
		"""
		num=5
		actual = math_util.is_even_number(num)
		self.assertFalse(actual)
        
	def test_is_even_number_2(self):
		"""
		test for even number
		"""
		num=10
		actual = math_util.is_even_number(num)
		self.assertTrue(actual)
test_math_util.py

further reading - https://pythonhosted.org/gchecky/unittest-pysrc.html

Show Comments