Preamble

In most cases the best approach to study how something works is to test its behavior in various circumstances. In a helicopter view it is a dissection or a scrutiny.

The same approach for studying programming language has a plethora benefits and the most significant is that it take you chance to play with code. Of cause studying by playing is a most natural way of learning.

Methodology

Template

Lets create a mold for pouring by the test suits:

#+BEGIN_SRC python :noweb yes :results none :tangle tests/test_built-in_constants.py
"""Discover how it works by a coherent testing"""
<<import-header>>


<<built-in-constants-test>>
# it might be several test cases
# thus several test classes
# as several include source code block
#+END_SRC

Tip Use C-c C-v t to generate (tangle) the test file

Necessary imports

It's clear what you expected to test by means the unittest module:

#+NAME: import-header
#+BEGIN_SRC python
import unittest
#+END_SRC

Test suits

Each test case class as a separate source code block with a particular name for substitution into template.

#+NAME: built-in-constants-test
#+BEGIN_SRC python
  class TestBuiltInConstants(unittest.TestCase):

      def test_true(self):
          self.assertTrue(1 + 3 == 4)

      def test_false(self):
          self.assertFalse(1 + 4 == 4)

      def test_none(self):
          value = None
          self.assertIsNone(value)
#+END_SRC

Obviously that arbitrary number of named blocks can exist there.

Test runner

Accustomed unittest as Python module:

#+BEGIN_SRC sh :results output :exports both
  python -m unittest -v tests/test_built-in_constants.py

#+END_SRC

#+RESULTS:
: test_false (tests.test_built-in_constants.TestBuiltInConstants) ... ok
: test_none (tests.test_built-in_constants.TestBuiltInConstants) ... ok
: test_true (tests.test_built-in_constants.TestBuiltInConstants) ... ok
: 
: ----------------------------------------------------------------------
: Ran 3 tests in 0.002s
: 
: OK

Conclusion

Now it is totally clear how to compose tests for Python standard library testing in a literate programming style.



blog comments powered by Disqus

Published

09 September 2016

Categories

python stdlib TDD literate programming

Tags