It's like a Python library you always missed.

Unit testing has never been easier.
With UnitTestBot Python, you automate the whole testing process.
The comprehensive tests are synthesized without your assistance — from finding units to writing out method bodies to choosing proper inputs and asserting.

Smarter fuzzing for richer testing.

UnitTestBot Python is based on a smart fuzzing technique, which goes beyond generating random values. It involves heuristics to find more valid inputs faster. And you get more than just a bunch of inputs or templates. UnitTestBot Python provides you with ready-to-use tests — carefully selected to be the necessary and sufficient ones.

Fuzzing example

Fits in with your workflow.

UnitTestBot Python is available both as the plugin for IntelliJ IDEA or the command-line interface.
Choose the interface you need and integrate the tool into your working process.
Take advantage of the graphical UI and the related IDE features or get the most out of the minimalist textual mode perfect for scripting and automation.

Plugin and CLI usage examples

No type annotations? No problem.

Dynamic type checking in Python is a challenge for automated test generation tools.
UnitTestBot Python met it with a custom type inference technique.
If there are no explicit type hints in the user code, UnitTestBot Python analyzes code usage, infers possible types with the help of Typeshed and verifies them with mypy.
You won't get a test with TypeError unless you want to.

Type inference example

Two most popular frameworks supported.

UnitTestBot Python is able to generate test cases in the unittest or pytest format.
Continue using pytest as your favorite framework — combine the generated cases with the existing test suite and run them altogether. And if you stuck to built-in unittest, UnitTestBot Python is here to generate the corresponding output.

Pytest and Unittest example

Failure is not an option.

Sometimes in Python, one does not simply compare complex objects, and generating assertions becomes a non-trivial task. In this case, UnitTestBot Python won't leave you with always-failing assertions or no tests at all.
If something went wrong and you cannot compare the objects by value, UnitTestBot Python adds an assertion on the type of the object.

Fuzzing example