Python Testing: Beginner's Guide

More Information
  • Make testing easy and convenient with Python's doctest module, which lets you put your tests right into your doc strings
  • Drive development using unit testing and learn how it can make the process quicker
  • Explore the assorted features Mocker provides to help you keep units separate from each other and customize it to suit your needs
  • Embed your tests in a controlled and temporary environment using test fixtures
  • Simplify the integration of unittest and Mocker using Python Mocker's MockerTestCase
  • Automatically find and execute tests using Nose – a unittest-based testing framework for Python that makes writing and running tests easier
  • Write tests for web applications using Twill and integrate it's capabilities as a library into Python testing code
  • Create integration tests and run them to see if your programs work correctly in concert with each other
  • Run Nose automatically when your version control software detects changes in the source code
  • Set up the Buildbot automated continuous integration system to run your tests repeatedly over many different environments

Chapter 1
introduces Python test-driven development and various testing methods.

Chapter 2 covers the doctest tool and teaches you how to use it.

Chapter 3 introduces the ideas of unit testing and test-driven development, and applies doctest to create unit tests.

Chapter 4 covers mock objects and the Python Mocker tool.

Chapter 5 introduces the unittest framework and discusses when it is preferred over doctest.

Chapter 6 introduces the Nose test runner, and discusses project organization.

Chapter 7 walks through a complete test-driven development process.

Chapter 8 applies the knowledge gained from previous chapters to web applications, and introduces the Twill tool.

Chapter 9 teaches how to build up from unit tests to tests of a complete software system.

Chapter 10 introduces code coverage and continuous integration, and teaches how to tie automated testing into version control systems.


Automated testing moves much of the labor of testing off the developer and makes it easier as well as quicker to find bugs and fix them. Automated tests run faster, increase test coverage, and lower costs. However, testing is neither an easy process nor remotely exciting for most developers. But with the right techniques and tools, testing can become a simple and gratifying part of the development process.

With this helpful guide – from an expert – in your hand, testing will not be a tiresome topic for you anymore. You will learn how to test your Python projects in the easiest way, making other parts of the development process easier and more enjoyable.

This book covers the tools and techniques of automated testing and test-driven development. Starting from the very basics, the chapters introduce new tools and techniques in simple, accessible language with step-by-step examples. You will explore how to make testing easier and more accurate with Python's doctest module and learn test-driven development using the unittest framework. You will also learn how to keep your units separate from each other and discover a simple and easy way to integrate Mocker and unittest. Next, we cover integration testing and web application testing.

Automated testing gives developers better feedback, faster and more often. Bugs get found sooner and fixed better, with less effort. By the end of this book, you will have all of the skills needed to benefit from automated testing.

  • Covers everything you need to test your code in Python
  • Easiest and enjoyable approach to learn Python testing
  • Write, execute, and understand the result of tests in the unit test framework
  • Packed with step-by-step examples and clear explanations
Page Count 256
Course Length 7 hours 40 minutes
ISBN 9781847198846
Date Of Publication 14 Jan 2010
Basic doctest
Time for action – creating and running your first doctest
Time for action – writing a more complex test
Time for action – expecting an exception
Time for action – using ellipsis in tests
Time for action – normalizing whitespace
Time for action – skipping tests
Embedding doctests in Python docstrings
Time for action – embedding a doctest in a docstring
Putting it in practice: an AVL tree
What is Unit testing and what it is not?
Time for action – identifying units
Unit testing throughout the development process
Time for action – unit testing during design
Time for action – unit testing during development
Time for action – unit testing during feedback
Time for action – unit testing during development... again
Time for action – unit testing during maintenance
Time for action – unit testing during reuse
Installing Python Mocker
Time for action – installing Python Mocker
The idea of a mock object
Python Mocker
Time for action – exploring the basics of Mocker
Mocking self
Time for action – passing a mock object as self
Basic unittest
Time for action – testing PID with unittest
Test fixtures
Time for action – testing database-backed units
Integrating with Python Mocker
What is Nose?
Installing Nose
Organizing tests
Time for action – organizing tests from previous chapters
Nose and doctest
Time for action – creating a fixture for a doctest
Nose and unittest
Time for action – creating a module fixture
Time for action – creating a package fixture
Nose's own testing framework
Time for action – using Nose-specific tests
Writing the specification
Time for action – what are you going to do?
Writing initial unit tests
Time for action – nailing down the specification with unit tests
Using the tests to get the code right
Fixing the code
Time for action – writing and debugging code
Writing persistence tests
Writing persistence code
Finishing up
Installing Twill
Exploring the Twill language
Time for action – browsing the web with Twill
Time for action – Twill scripting
Calling Twill scripts from tests
Time for action – running Twill script files
Time for action – running Twill script strings
Integrating Twill operations into unittest tests
Time for action – using Twill's browser object
Integration tests and system tests
Time for action – figuring out the order of integration
Automation with doctest, unittest, and Nose
Time for action – writing integration tests for the time planner
Code coverage
Time for action – using
Version control hooks
Time for action – installing Nose as a Bazaar post-commit hook
Time for action – installing Nose as a Mercurial post-commit hook
Time for action – installing Nose as a Git post-commit hook
Time for action – installing Nose as a Darcs post-record hook
Time for action – installing Nose as a Subversion post-commit hook
Automated continuous integration
Time for action – using Buildbot with Bazaar