AIUnitTest is a command-line tool that reads your pyproject.toml
and test coverage
data (.coverage
) to generate and update missing Python unit tests using AI.
- Coverage Analysis: The tool uses
coverage.py
to identify lines of code that are not covered by your existing test suite. - Source Code Chunking: It breaks down the source code into logical chunks (functions and classes).
- AI-Powered Test Generation: For each chunk with uncovered lines, it sends the source code and the uncovered line numbers to an AI model (like OpenAI's GPT) to generate new test cases.
- Test File Updates: The newly generated tests are appended to the corresponding test file.
- Coverage Analysis: Uses the Coverage.py API to identify untested lines.
- AI-Powered Test Generation: Calls OpenAI GPT to create or enhance test cases.
- Config-Driven: Automatically picks up
coverage.run.source
andpytest.ini_options.testpaths
frompyproject.toml
. - Auto Mode: The
--auto
flag sets source and tests directories without manual arguments. - Async & Parallel: Speeds up OpenAI requests for large codebases.
There are two ways to install AIUnitTest:
You can install the latest stable version from PyPI:
pip install AIUnitTest
-
Clone the repository:
git clone https://github.com/ofido/AIUnitTest.git cd AIUnitTest
-
Install the project in editable mode:
pip install -e .
The easiest way to run the tool is in automatic mode.
It will automatically discover your source and test folders
from your pyproject.toml
file.
ai-unit-test --auto
You can also specify the source and test folders manually:
ai-unit-test --folders src --tests-folder tests
You can also generate a test for a single function:
ai-unit-test func my_module/my_file.py my_function
--folders
: The source code folders to analyze.--tests-folder
: The folder where the tests are located.--coverage-file
: The path to the.coverage
file.--auto
: Try to discover folders/tests frompyproject.toml
.
AIUnitTest uses the standard pyproject.toml
file for configuration.
Here are the relevant sections:
[tool.coverage.run]
:source
: A list of source code folders.
[tool.pytest.ini_options]
:testpaths
: A list of test folders.
Contributions are welcome! Please feel free to submit a pull request or open an issue.
This project is licensed under the MIT License see the LICENSE file for details.