Home Accessibility Courses Twitter The Mouth Facebook Resources Site Map About Us Contact
 
Python, Lua, Tcl, C and C++ training - public course schedule [here]
Private courses on your site - see [here]
Please ask about maintenance training for Perl, PHP, Java, Ruby, MySQL and Linux / Tomcat systems
 
Combining tests into suites, and suites into bigger suites - Python and unittest

Why are you writing code? To meet a customer requirement! And that code needs to work, to be reliable, and to continue to be reliable into the future as you update it / fix bugs. If you're a programmer, have you ever applied a "quick fix" to something just to discover (perhaps later) that you've broken something else in the process?

So I'm going to encourage you to write a test program (and write it FIRST - even before the code). That probably won't be enough, so you'll write a series of test routines - a test suite - and in most languages (including python - today's subject), you'll find that there are regression or unit test frameworks which let you manage your group of tests - for example to set up data prior to each test, run and log the results, and report on how the tests have run. This means that you can simply say "retest that [class]" and have all the checks made - with a new test being added into the suite when a bug is reported or an enhancement requested to (initially) illustrtate the issue to resolved / code to be written, then later prove that it has been written, that it works, and that the old code still works too!.

From last week:

A group of classes (myTrain) to be tested - [here]
Unittests for that group [here]

A second group (station) to be tested - [here]
Unittests for that group [here]

Note - both sets of tests are representative only - there should be a lot more tests in each suite.

Requirement to combine test suites

Complete applications and systems comprise many classes and groups, and you'll want to run all the groups of tests together. You can do that too by combining your test suites. There seems to be a lack of clear, staightforward examples around - so here is the code for combining the two sets of test described above:

  # Combining Test Suites - unittest
  
  # ----------------- Unit test framework
  import unittest
  
  # ---------------- Individual test suites
  import Traintest
  import Stationtest
  
  # ----------------- Load all the test cases
  suiteList = []
  suiteList.append(unittest.TestLoader().loadTestsFromTestCase(Traintest.TrainTest))
  suiteList.append(unittest.TestLoader().loadTestsFromTestCase(Stationtest.StationTest))
  
  # ---------------- Join them together and run them
  comboSuite = unittest.TestSuite(suiteList)
  unittest.TextTestRunner(verbosity=0).run(comboSuite)


That source available [here] too in order to complete the example.

On all of our courses, we ensure we teach the need for testing from the start. We encourage good practise, with initial design work up front, and behaviour or test driven development where appropriate.
(written 2015-03-01)

 
Associated topics are indexed as below, or enter http://melksh.am/nnnn for individual articles
Y212 - Python - Code testing, patterns, profiles and optimisation.
  [4716] Profiling your Python program - (2016-11-01)
  [4618] Pytest - second example beyond hello world - (2016-01-08)
  [4617] Pytest - starting example - (2016-01-07)
  [4542] The principle of mocking - and the Python Mock package - (2015-10-17)
  [4540] Unittest of a Flask application including forms - (2015-10-15)
  [4538] Flask and unittest - hello web app test world - (2015-10-15)
  [4470] Testing in Python 3 - unittest, doctest and __name__ == __main__ too. - (2015-04-21)
  [4344] Python base and inherited classes, test harness and unit testing - new examples - (2014-12-07)
  [4326] Learning to program - comments, documentation and test code - (2014-11-22)
  [4090] Test Driven Development in Python - Customer Comes First - (2013-05-16)
  [3658] Using Make for a distribution - (2012-03-17)
  [3478] Testing your Python classes with the unittest package - how to - (2011-10-14)
  [3464] Passing optional and named parameters to python methods - (2011-10-04)
  [3442] A demonstration of how many Python facilities work together - (2011-09-16)
  [3441] Pressing ^C in a Python program. Also Progress Bar. - (2011-09-15)
  [2616] Defining a static method - Java, Python and Ruby - (2010-02-01)
  [2123] Using Python with OpenOffice - (2009-04-09)
  [1555] Advanced Python, Perl, PHP and Tcl training courses / classes - (2008-02-25)
  [1148] Python decorators - wrapping a method call in extra code - (2007-04-15)
  [1146] __new__ v __init__ - python constructor alternatives? - (2007-04-14)
  [1140] Python GTK - Widget, Packing, Event and Feedback example - (2007-04-09)
  [235] Preparation for a day's work - (2005-03-04)


Back to
Graphing presentations in Python - huge data, numpy and matplotlib
Previous and next
or
Horse's mouth home
Forward to
Overnight accommodation in Melksham - if Well House Manor is full!
Some other Articles
Deciding whether to use parameters, conditional statements or subclasses
Spike solution, refactoring into encapsulated object methods - good design practise
What is the difference between a function and a method?
Overnight accommodation in Melksham - if Well House Manor is full!
Combining tests into suites, and suites into bigger suites - Python and unittest
Graphing presentations in Python - huge data, numpy and matplotlib
Elements of an exception in Python - try, except, else, finally
Seventh stay away this year - and it's still only February!
Mutable v Immuatble objects in Python, and the implication
Reading command line parameters in Python
4754 posts, page by page
Link to page ... 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96 at 50 posts per page


This is a page archived from The Horse's Mouth at http://www.wellho.net/horse/ - the diary and writings of Graham Ellis. Every attempt was made to provide current information at the time the page was written, but things do move forward in our business - new software releases, price changes, new techniques. Please check back via our main site for current courses, prices, versions, etc - any mention of a price in "The Horse's Mouth" cannot be taken as an offer to supply at that price.

Link to Ezine home page (for reading).
Link to Blogging home page (to add comments).

You can Add a comment or ranking to this page

© WELL HOUSE CONSULTANTS LTD., 2017: 404 The Spa • Melksham, Wiltshire • United Kingdom • SN12 6QL
PH: 01144 1225 708225 • EMAIL: info@wellho.net • WEB: http://www.wellho.net • SKYPE: wellho

PAGE: http://www.wellho.net/mouth/4446_Com ... ttest.html • PAGE BUILT: Sat May 27 16:49:10 2017 • BUILD SYSTEM: WomanWithCat