Unit Testing

Unit testing is a method of determining the correctness of a single function isolated from a larger codebase. The idea is that if all the atomic units of an application work as intended in isolation, then integrating them together as intended is much easier.

Why is unit testing important?

Unit testing is just one form of testing that works in combination with other testing approaches to wring out the bugs from a piece of software being developed. When several functions and classes are put together it's often difficult to determine the source of a problem if several bugs are occurring at the same time. Unit testing helps eliminate as many of the individual bugs as possible so when the application comes together as a whole the separate parts work as correct as possible. Then when issues arise they can often be tracked down as unintended consequences of the disparate pieces not fitting together properly.

Unit testing tools

There are many tools for creating tests in Python. Some of these tools, such as pytest, replace the built-in unittest framework. Other tools, such as nose, are extensions that ease test case creation. Note that many of these tools are also used for integration testing by writing the test cases to exercise multiple parts of code at once.

  • unittest is the built-in standard library tool for testing Python code.

  • pytest is a complete testing tool that emphasizes backwards-compatibility and minimizing boilerplate code.

  • nose is an extension to unittest that makes it easier to create and execute test cases.

  • Hypothesis is a unit test-generation tool that assists developers in creating tests that exercise edge cases in code blocks. The best way to get started using Hypothesis is by going through the well-written quickstart.

  • mimesis generates synthetic test data which is useful to apply in your tests.

  • testify was a testing framework meant to replace the common unittest+nose combination. However, the team behind testify is transitioning to pytest so it's recommended you do not use testify for new projects.

Unit testing resources

Unit tests are useful in every project regardless of programming language. The following resources provide a good overview of unit testing from several viewpoints and follow up with additional depth in testing Python-specific applications.

What else do you want to learn about testing?

What code metrics should I be aware of?

How do I go about testing my Python code?

Can I automate testing and deployments for my app?

Matt Makai 2012-2022