Testing
Use focused tests while iterating and the full suite before merge or release. The default pytest command runs unit, training, command-level, and downloaded model checks; it is not a fast unit-only loop.
Quick local feedback
From a checkout, first source the development environment:
$ source develop.sh
Run lint plus focused unit tests while iterating:
$ ./lint.sh
$ python -m pytest -q test/test_amino_acid.py test/test_random_negative_peptides.py
To run the broad fast tier, skip the tests marked as slow integration, cached-bundle, or benchmark checks:
$ python -m pytest -q test -m "not slow and not downloads"
When working on training internals, add the directly affected files rather than jumping immediately to the full suite. Useful examples:
$ python -m pytest -q test/test_class1_affinity_training_data.py
$ python -m pytest -q test/test_pytorch_regressions.py
$ python -m pytest -q test/test_train_pan_allele_models_command.py::test_pretrain_network_input_iterator_compact_torch_indices
Full verification
Before calling a release-branch change complete, run:
$ ./lint.sh
$ python -m pytest test/
If the run is unexpectedly slow, ask pytest for the slowest tests:
$ python -m pytest -q test --durations=25 --durations-min=0.5
On macOS, prefer python -m pytest over the generated pytest console script
so PyTorch can see MPS accelerators.
What the full suite covers
The full suite includes:
pure unit tests for encoding, losses, random-negative planning, and argument resolution;
small neural-network training tests that verify numerical behavior;
command-level subprocess tests that train, select, and calibrate tiny predictors end-to-end; and
public-model smoke tests that require cached MHCflurry download bundles.
The slowest tests are usually small integration tests that do real model work:
test/test_train_pan_allele_models_command.pyruns serial, parallel, and cluster-shaped pan-allele train/select command flows.test/test_train_processing_models_command.pytrains and selects processing models.test/test_class1_neural_network.pycontains full training behavior checks such as inequality handling, early stopping, and learned motif recovery.public-model tests load cached MHCflurry download bundles and run prediction smoke checks.
Mark new tests according to their cost. Keep small deterministic logic in unit tests, and reserve end-to-end command or training checks for behavior that cannot be covered at a narrower level.
Markers
slowTests that are too expensive for the fast local loop. These are usually small training jobs or benchmark-style checks.
integrationEnd-to-end command or training tests that exercise multiple modules through the public CLI/API.
downloadsTests that require locally cached MHCflurry download bundles. These tests should not fetch from the network; missing bundles should fail or skip with an instruction to run
mhcflurry downloads fetchoutside pytest.