Apathetic Python Testing πŸ§ͺ

Runtime-aware pytest extensions.
When you need just a bit more.

Apathetic Python Testing provides a focused collection of pytest fixtures and utilities designed for Apathetic Tools projects. It helps you test CLI applications, logging behavior, and code that ships as stitched scripts or zipapps.

Some ways to generate stitched scripts are serger; and for zipapps: zipbundler or stdlib’s zipapp.

[!NOTE] This project is largely AI-written and minimally polished. I rely on it, but I haven’t reviewed every detail. Expect rough edges. Thoughtful issue reports are appreciated.

Features

Quick Example

from apathetic_testing import patch_everywhere
from apathetic_testing.logging import (
    isolated_logging,
    logging_test_level,
    logging_level_testing,
)
from unittest.mock import Mock

# Test with isolated logging
def test_app_logging(isolated_logging):
    isolated_logging.set_root_level("DEBUG")
    my_app.run()
    # State automatically reset after test

# Debug with TEST level (all logs visible)
def test_app_with_debugging(logging_test_level):
    my_app.run()  # All DEBUG and TRACE logs visible

# Test log level changes (e.g., --log-level flag)
def test_cli_debug_flag(logging_level_testing):
    cli.main(["--log-level", "debug"])
    logging_level_testing.assert_level_changed_from("ERROR", to="DEBUG")

# Safe patching that works in all runtime modes
def test_with_patching():
    with patch_everywhere("module.function", Mock(return_value=42)):
        result = module.function()
        assert result == 42

Requirements

No other dependencies required β€” this library uses only Python’s standard library.

Installation

Install via poetry or pip:

# Using poetry
poetry add apathetic-testing

# Using pip
pip install apathetic-testing

Documentation

License

MIT-a-NOAI License

You’re free to use, copy, and modify the library under the standard MIT terms.
The additional rider simply requests that this project not be used to train or fine-tune AI/ML systems until the author deems fair compensation frameworks exist.
Normal use, packaging, and redistribution for human developers are unaffected.

Resources