ECCV2018_CrossNet_RefSR icon indicating copy to clipboard operation
ECCV2018_CrossNet_RefSR copied to clipboard

feat: Set up complete Python testing infrastructure with Poetry

Open llbbl opened this issue 3 months ago • 0 comments

Set up Python Testing Infrastructure

Summary

This PR establishes a comprehensive testing infrastructure for the CrossNet project using Poetry as the package manager. The setup provides a robust foundation for writing and running tests with coverage reporting.

Changes Made

Package Management

  • Created pyproject.toml with Poetry configuration
  • Migrated dependencies from README requirements to structured Poetry format
  • Added testing dependencies: pytest, pytest-cov, pytest-mock

Testing Infrastructure

  • Created testing directory structure:

    • tests/ (root directory with __init__.py)
    • tests/unit/ (for unit tests)
    • tests/integration/ (for integration tests)
  • Configured pytest settings in pyproject.toml:

    • Test discovery patterns
    • Coverage reporting (HTML, XML, terminal)
    • 80% coverage threshold
    • Custom markers: unit, integration, slow
    • Strict configuration for better test reliability

Shared Testing Resources

  • Created tests/conftest.py with comprehensive shared fixtures:
    • temp_dir: Temporary directory management
    • sample_tensor, sample_flow: PyTorch tensor fixtures
    • mock_config: Configuration dictionaries
    • sample_hdf5_file: HDF5 test data creation
    • mock_cuda_device: GPU/CPU device handling
    • Environment setup with deterministic random seeds

Project Configuration

  • Updated .gitignore with:
    • Testing artifacts (.pytest_cache/, .coverage, htmlcov/)
    • Development files (IDE settings, OS files)
    • Project-specific exclusions (checkpoints, model files)
    • Claude settings exclusion

Validation

  • Created tests/test_setup_validation.py to verify:
    • All dependencies import correctly
    • Fixtures work as expected
    • PyTorch operations function properly
    • HDF5 file creation and reading
    • Project structure validation
    • Basic model creation capabilities

Running Tests

# Install dependencies
poetry install

# Run all tests
poetry run pytest

# Run tests with verbose output
poetry run pytest -v

# Run specific test markers
poetry run pytest -m unit
poetry run pytest -m integration
poetry run pytest -m slow

# Run tests without coverage (for quick validation)
poetry run pytest --no-cov

# Generate coverage report
poetry run pytest --cov-report=html

Coverage Reporting

The setup generates multiple coverage report formats:

  • Terminal: Shows missing lines during test runs
  • HTML: Detailed report in htmlcov/ directory
  • XML: Machine-readable report in coverage.xml

Coverage is configured to:

  • Monitor Model/ and ref_utils/ source directories
  • Exclude test files and cache directories
  • Require 80% minimum coverage threshold
  • Show precise line-by-line coverage information

Dependencies Installed

Core Dependencies

  • torch ^2.0.0 (PyTorch for deep learning)
  • opencv-python ^4.0.0 (Computer vision operations)
  • h5py ^3.0.0 (HDF5 file format support)
  • numpy ^1.20.0 (Numerical computing)

Test Dependencies

  • pytest ^7.0.0 (Main testing framework)
  • pytest-cov ^4.0.0 (Coverage reporting)
  • pytest-mock ^3.10.0 (Mocking utilities)

Notes

  • Poetry lock file is included and should be committed for reproducible builds
  • The existing Python files use Python 2 syntax (e.g., cPickle) but the testing infrastructure supports Python 3.8+
  • OpenCV import may fail in headless environments - the validation tests handle this gracefully
  • Coverage warnings about unparseable files are expected for legacy Python 2 code

Testing Philosophy

This infrastructure follows testing best practices:

  • Separation of concerns: Unit tests for individual components, integration tests for system interactions
  • Reproducible tests: Fixed random seeds and deterministic behavior
  • Comprehensive fixtures: Reusable test resources to reduce code duplication
  • Flexible execution: Multiple ways to run tests based on development needs
  • Quality gates: Coverage thresholds to maintain code quality

The setup is ready for immediate use - developers can start writing tests using the established patterns and fixtures.

llbbl avatar Sep 01 '25 17:09 llbbl