How to Write Integration Tests

The Data Repository

Integration tests will typically require data from the data repository located in iMars3D/tests/data/imars3d-data/ as a git submodule.

TL;DR

Perform the following steps after cloning the repo and cd to the root of the repo:

  • sudo apt install git-lfs (if not already installed)

  • git submodule init

  • git submodule update

Now you should have the integration test data downloaded to iMars3D/tests/data/imars3d-data/. If you are interested in how it is configured, please continue reading.

Git Submodule

tutorials:

typical commands:

Here, “submodule” refers to repo imars3d-data and “parent” refers to repo imars3d

  • checkout the submodule after cloning the parent with command git submodule init

  • find the refspec stored in the parent with command git ls-tree $(git branch --show-current) tests/data/imars3d-data

  • synchronize the submodule to the refspec stored in the parent with command git submodule update

  • after making commits in the sumodule, synchronize the refspec stored in the parent with commands git add...` and `git commit...

Pytest Fixtures

Pytest fixtures in conftest.py providing directories frequently accessed:

Fixture

Value (as a pathlib.Path object)

DATA_DIR

iMars3D/tests/data/imars3d-data

IRON_MAN_DIR

iMars3D/tests/data/imars3d-data/HFIR/CG1D/IPTS-25777/raw/ct_scans/iron_man

Writing Test Functions

Test functions accessing DATA_DIR should be marked with the datarepo marker

@pytest.mark.datarepo
def test_function(DATA_DIR):
    pass