Home Accessibility Courses Twitter The Mouth Facebook Resources Site Map About Us Contact
 
For 2023 (and 2024 ...) - we are now fully retired from IT training.
We have made many, many friends over 25 years of teaching about Python, Tcl, Perl, PHP, Lua, Java, C and C++ - and MySQL, Linux and Solaris/SunOS too. Our training notes are now very much out of date, but due to upward compatability most of our examples remain operational and even relevant ad you are welcome to make us if them "as seen" and at your own risk.

Lisa and I (Graham) now live in what was our training centre in Melksham - happy to meet with former delegates here - but do check ahead before coming round. We are far from inactive - rather, enjoying the times that we are retired but still healthy enough in mind and body to be active!

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


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
4759 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., 2024: 48 Spa Road • Melksham, Wiltshire • United Kingdom • SN12 7NY
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: Sun Oct 11 16:07:41 2020 • BUILD SYSTEM: JelliaJamb