Moving on from my
hello Pytest World example, lets add some more tests and put the code we're testing into a separate file. The test code is
[here] and - if working in a TDD (Test Driven Developent) mode it will be written first - forming the specificiation for the class you're writing.
I have brought the code to be tested in with:
from mathstuff import *
Having carefully thought through whether "from" to bring the code into my current namespace or "import" to keep it separate, I've decided (in order to keep the training examples a bit shorter to use
import. For a small real-world setup this might be a good decision, for a large and complex setup with lots of classes to be tested,
from would be best. The file mathstuff.py is
[here]
In addition to the "hello world" example, I've added ...
1. Further tests ... identified by being methods with names starting
test_
2. A test which starts with the name
another_; in order for this to be picked up by the park of pytest that seeks out the tests, I've provided a configuration file, setup.cfg which may be found
[here], as follows:
[pytest]
python_functions = another_* test_*
3. I have decorated one of the tests to indicate that I know it will fail
@pytest.mark.xfail
def test_add_003():
assert addition(10,15) == 26
4. I have provided a setup routine to be run before each and every test (but better ways of doing this are shown in later examples):
def setup_function(summat):
print("The world is round {}".format(summat))
5. I have run my tests with the
-s option so that any print statements within are run / displayed (default is that stdout is supressed)
python -m pytest -s test_mathfuncs.py
Full code including sample output from a run ...
[here] (written 2016-01-08)
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)
[4446] Combining tests into suites, and suites into bigger suites - Python and unittest - (2015-03-01)
[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)
[4716] Profiling your Python program - (2016-11-01)
Some other Articles
Frosty morning, beauty of WiltshireThe power of scriptingPerl 6 - a Practical Extraction and Reporting example!Buses - not about the buses, but about the people who use the busesPytest - second example beyond hello worldStill teaching Tcl in 2016?Questions for First (West of England)PC Plod - alive and scaremongering in Wiltshire?Our best hotel customers help us ... to help them ... be our best customers.