Skip to content

Conversation

llbbl
Copy link

@llbbl llbbl commented Sep 3, 2025

Set up comprehensive Python testing infrastructure

Summary

This PR establishes a complete testing infrastructure for the Python Functions Programming Exercises project, providing developers with a ready-to-use environment for writing and running tests.

Changes Made

Package Management

  • Poetry Setup: Added pyproject.toml with Poetry configuration as the package manager
  • Dependencies: Added essential testing dependencies as dev dependencies:
    • pytest (v7.4.0+) - Main testing framework
    • pytest-cov (v4.1.0+) - Coverage reporting
    • pytest-mock (v3.11.0+) - Mocking utilities

Testing Configuration

  • Pytest Configuration: Comprehensive pytest setup in pyproject.toml:
    • Test discovery patterns for various file naming conventions
    • Coverage settings with 80% threshold requirement
    • HTML and XML coverage report generation
    • Strict marker and config enforcement
    • Custom markers: unit, integration, slow, it (LearnPack compatibility)

Directory Structure

  • Test Organization: Created proper testing directory hierarchy:
    tests/
    ├── __init__.py
    ├── conftest.py          # Shared fixtures and configuration
    ├── unit/
    │   └── __init__.py
    ├── integration/
    │   └── __init__.py
    └── test_infrastructure.py  # Validation tests
    

Shared Testing Utilities

  • Comprehensive Fixtures in tests/conftest.py:
    • temp_dir - Temporary directory management
    • mock_config - Configuration mocking
    • app - Dynamic exercise module loading
    • mock_print / mock_input - Built-in function mocking
    • capture_stdout - Output capture utilities
    • sample_data - Common test data structures
    • mock_file_system - File system mocking
    • environment_vars - Environment variable mocking

Development Workflow

  • Git Integration: Updated .gitignore with testing exclusions:
    • Coverage files (.coverage, htmlcov/, coverage.xml)
    • Test caches (.pytest_cache/)
    • Virtual environments and IDE files
    • Note: poetry.lock is tracked (not ignored) as per best practices

Validation & Quality

  • Infrastructure Tests: Added comprehensive validation tests to ensure:
    • All fixtures work correctly
    • Directory structure is proper
    • Project compatibility is maintained
    • Testing utilities function as expected

How to Run Tests

Install Dependencies

poetry install

Run All Tests

poetry run pytest                    # All tests
poetry run python -m pytest         # Alternative command

Run Specific Test Categories

poetry run pytest -m unit          # Unit tests only
poetry run pytest -m integration   # Integration tests only
poetry run pytest -m slow          # Slow tests only

Run With Coverage

poetry run pytest --cov=exercises  # With coverage (default)
poetry run pytest --no-cov         # Without coverage

Generate Coverage Reports

poetry run pytest                   # Generates HTML (htmlcov/) and XML reports

Testing Features

  • Coverage Reporting: 80% threshold with detailed HTML and XML reports
  • Flexible Test Discovery: Supports multiple naming conventions
  • Mocking Utilities: Built-in fixtures for common mocking scenarios
  • Exercise Compatibility: Dynamic module loading for exercise-based testing
  • Performance Testing: Support for slow test markers
  • LearnPack Integration: Compatible with existing @pytest.mark.it markers

Notes

  • No Unit Tests Written: This PR focuses solely on infrastructure setup, not writing actual tests for the codebase
  • Backward Compatibility: Existing exercise tests should continue to work (with updated fixtures)
  • Ready for Development: Developers can immediately start writing tests using the provided fixtures and configuration
  • Lock File Management: poetry.lock is tracked in version control for reproducible builds

Validation

All validation tests pass, confirming:

  • ✅ Testing infrastructure works correctly
  • ✅ Fixtures and utilities are functional
  • ✅ Coverage reporting generates properly
  • ✅ Project structure is maintained
  • ✅ Dependencies install successfully

- Add Poetry package manager with pyproject.toml configuration
- Install testing dependencies: pytest, pytest-cov, pytest-mock
- Create organized test directory structure (tests/, unit/, integration/)
- Configure pytest with coverage reporting (80% threshold, HTML/XML output)
- Add comprehensive shared fixtures in conftest.py for common testing needs
- Support for custom test markers (unit, integration, slow, it)
- Update .gitignore with testing-related exclusions
- Include validation tests to verify infrastructure functionality

Ready-to-use testing environment where developers can immediately start writing tests.
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