Skip to content

feat: Set up complete Python testing infrastructure with Poetry #28

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: master
Choose a base branch
from

Conversation

llbbl
Copy link

@llbbl llbbl commented Jun 14, 2025

Add Python Testing Infrastructure

Summary

This PR establishes a comprehensive testing infrastructure for the GPT-2 PyTorch implementation project using Poetry as the package manager and pytest as the testing framework.

Changes Made

Package Management

  • Poetry Setup: Created pyproject.toml with Poetry configuration
  • Dependency Migration: Migrated existing dependencies from requirements.txt and added missing ones (PyTorch, tqdm)
  • Development Dependencies: Added pytest, pytest-cov, and pytest-mock as dev dependencies

Testing Configuration

  • pytest Configuration:

    • Test discovery patterns for test_*.py and *_test.py files
    • Coverage reporting with 80% threshold requirement
    • HTML and XML coverage report generation
    • Custom markers: unit, integration, and slow
  • Coverage Settings:

    • Source coverage focused on GPT2 module
    • Exclusions for test files and virtual environments
    • Detailed reporting with missing line numbers

Project Structure

tests/
├── __init__.py
├── conftest.py          # Shared fixtures
├── test_setup_validation.py  # Infrastructure validation
├── unit/
│   └── __init__.py
└── integration/
    └── __init__.py

Fixtures and Utilities

Created comprehensive fixtures in conftest.py:

  • temp_dir: Temporary directory management
  • mock_config: GPT-2 configuration mocking
  • sample_text: Test text data
  • mock_model_files: Mock model file creation
  • mock_checkpoint_path: Checkpoint file simulation
  • capture_stdout: Output capture for testing
  • cleanup_cache: Automatic cache cleanup

Additional Updates

  • Updated .gitignore: Added entries for:
    • Testing artifacts (.pytest_cache/, coverage.xml, htmlcov/)
    • Claude-specific files (.claude/*)
    • Python build artifacts and virtual environments
    • Note to preserve poetry.lock file

How to Use

Installation

# Install Poetry if not already installed
curl -sSL https://install.python-poetry.org | python3 -

# Install dependencies
poetry install

Running Tests

# Run all tests with coverage
poetry run test

# Alternative command (both work)
poetry run tests

# Run specific test markers
poetry run pytest -m unit        # Unit tests only
poetry run pytest -m integration # Integration tests only
poetry run pytest -m "not slow"  # Skip slow tests

# Run with custom pytest options
poetry run pytest -v --tb=short  # Verbose with short traceback

Coverage Reports

  • Terminal: Coverage summary shown after each test run
  • HTML Report: Generated in htmlcov/ directory
  • XML Report: Generated as coverage.xml for CI integration

Notes

  • The 80% coverage threshold is configured but will fail initially since only validation tests are included
  • Poetry was chosen as the package manager for its modern dependency resolution and lock file management
  • All testing dependencies are isolated in the dev group to keep production dependencies clean
  • The infrastructure is ready for immediate test development

Next Steps

Developers can now:

  1. Write unit tests in tests/unit/
  2. Write integration tests in tests/integration/
  3. Use the provided fixtures for common testing scenarios
  4. Run tests with coverage to ensure code quality

- Added Poetry as package manager with pyproject.toml configuration
- Configured pytest with coverage reporting and custom markers
- Created test directory structure with shared fixtures
- Updated .gitignore with testing and Claude-specific entries
- Added validation tests to verify setup functionality
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant