Three refinements found while testing find_rotation_center() against the simulated LamNI: - Drop the trailing tomo_rotate(0) at the end of find_rotation_center(): both the isolated path (explicit rotate-back before applying the correction) and the extended path (verification sweep ends at 0) already leave lsamrot at 0 by then, so it was a pure duplicate move. - Simplify _live_sweep() to rotate directly to each waypoint instead of stepping through artificial step_deg-sized sub-moves with settle pauses in between -- a single tomo_rotate() already produces continuous physical rotation, so the stepping added nothing but jerkier motion and extra queue overhead. - Add _ensure_at_configured_center(), called at the start of find_rotation_center() before lfzp_in(). lamni_move_to_scan_center's interferometer-drift safety check (LamNIFermatScan.py) assumes lsamx/ lsamy start near their configured center and silently skips the entire corrective move if that drift exceeds 150um -- exactly the situation find_rotation_center() is meant to handle, since its purpose is recalibrating a potentially-stale center. Confirmed this was a real gap: a run where the stage hadn't started at its configured center produced a correct absolute target (verified via the interferometer reading) but a confusingly small apparent motor delta. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Getting Started with Testing using pytest
BEC is using the pytest framework. It can be installed via
pip install pytest
in your python environment.
We note that pytest is part of the optional-dependencies [dev] of the plugin package.
Introduction
Tests in this package should be stored in the tests directory.
We suggest to sort tests of different submodules, i.e. scans or devices in the respective folder structure, and to folow a naming convention of <test_module_name.py>.
It is mandatory for test files to begin with test_ for pytest to discover them.
To run all tests, navigate to the directory of the plugin from the command line, and run the command
pytest -v --random-order ./tests
Note, the python environment needs to be active.
The additional arg -v allows pytest to run in verbose mode which provides more detailed information about the tests being run.
The argument --random-order instructs pytest to run the tests in random order, which is the default in the CI pipelines.
Test examples
Writing tests can be quite specific for the given function. We recommend writing tests as isolated as possible, i.e. try to test single functions instead of full classes. A very useful class to enable isolated testing is MagicMock. In addition, we also recommend to take a look at the How-to guides from pytest.