Skip to content

Commit

Permalink
Merge pytesting contributions to main (#6207)
Browse files Browse the repository at this point in the history
* Add pytest-mock dependency (#5811)

* Updated environment lockfiles

* added pytest iris class (#5808)

* added pytest iris class

* actioned majority of review comments

* converted remaining functions to camel_case

* actioned majority of review comments

* make unit/config pytest (#5810)

* Convert all tests to pytest.

* Don't use staticmethod on fixtures.

* Everything in 'TestConcatenate__dask' can use the same sample cubes.

* Spurious parentheses in 'pytest.fixture()'

* Convert all tests to pytest.

* Rewrite `result_path()` for pytest (#5817)

* Rewrite result_path.

* Review comments.

* Configure pytest-mock as pytest required-plugin (#5815)

* pytest migration ruff PT compliance for unit.concatenate (#5823)

* pytest migration for unit.common.test_Lenient (#5822)

* pytest migration for unit.common.lenient.test_Lenient

* assert order

* review actions

* Convert to pytest.

* Better implementation of `_shared_utils.results_path()` - using PyTest `request` (#5827)

* Rewrite result_path to use the pytest request fixture.

* More explicit guidance on the request fixture.

* Convert to pytest.

* Convert to pytest.

* Convert graphics testing conveniences to PyTest (#5832)

* PyTest-compatible check_graphic.

* Demonstrate new check_graphic in test_plot.

* 7c4f700

* Revert "7c4f7003a"

This reverts commit 68f81ac.

* Revert "Demonstrate new check_graphic in test_plot."

This reverts commit 7c4f700.

* Tidy up other unittest references in iris.tests.graphics.

* Tidy up other unittest references in iris.tests.graphics.

* check_graphic_caller docstring example.

* Make check_graphic_caller only accessible from conftest.

* Simplify data fixtures.

* Simplify data fixtures.

* Simplify data fixtures.

* Simplify Mock usage.

* Tidy equality checks.

* Convert to pytest,

* pytest migration for unit.common.lenient.test__lenient_client (#5842)

* pytest migration for unit.common.lenient.test__lenient_client

* review actions

* pytest migration for unit.common.lenient.test__Lenient (#5828)

* pytest migration for unit.common.lenient.test__Lenient

* ruff PT rule compliant

* fixes

* refactor

* assert fixes

* review actions

* Convert to pytest.

* Convert `tests/test_plot` to PyTest (#5839)

* Convert test_plot to PyTest.

* Add explanatory comments.

* Make ruff PT compliant.

* Convert test_quickplot.

* Test aggregate pytest (#5846)

* pytestify test_aggregate_by.

* pytestify test_lazy_aggregate_by.

* pytest migration for unit.common.lenient.test__lenient_service (#5843)

* pytest migration for unit.common.mixin.test__get_valid_standard_name (#5847)

* pytest migration for unit.common.mixin.test_CFVariableMixin (#5849)

* pytest migration for unit.common.lenient.test__qualname (#5845)

* pytest migration for unit.common.lenient.test__qualname

* use setup_method

* use setup fixture

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* pytest migration for unit.common.mixin.test_LimitedAttributeDict (#5851)

* pytest migration for unit.common.mixin.test_LimitedAttributeDict

* use setup_method

* use setup fixture

* pytest migration for unit.common.metadata.test_NamedTupleMeta (#5852)

* Make test_analysis PyTest (#5859)

* Fixes to _shared_utils.

* Make test_analysis.py pytest.

* Make test_analysis_calculus.py pytest.

* Remove np.testing.

* Convert to pytest.

* Convert unit/fileformats/__init__ code to pytest + move to pp_load_rules where it belongs.

* Convert unit/fileformats/pp_load_rules to pytest.

* converted cube directory tests to pytest (#5837)

* converted asserts to pytest

* pytestified and search replaced. Ruffed

* resolved old references

* refactored preexisting setup_methods into _setup

* further changes

* fixed mock and CML assert

* fixed cdl call in shared_utils

* all tests passing

* review changes

* tests passing

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* Convert tests in unit/util to pytest (#5853)

* pytestify, and test__coord_regular

* search and replace

* ruff

* fixed most failures

* renamed result dir

* fixed review comments

* whoops, incorrectly called assert_original_metadata with request after removing it

* corrected assert

* Use mocker.spy in place of mock.patch.

* pytest migration for unit.common.metadata.test_AncillaryVariableMetadata (#5854)

* pytest migration for unit.common.metadata.test_AncillaryVariableMetadata

* use setup fixture

* review actions

* Convert `unit.plot` and `.quickplot` to PyTest (#5866)

* Convert tests.unit.plot to PyTest.

* Convert tests.unit.quickplot to PyTest.

* Convert setups to autouse fixtures.

* Convert to Pytest.

* Convert to Pytest.

* Convert to pytest.

* Convert to pytest, move test_rules into /rules.

* Convert to pytest

* Convert remaining graphics tests to PyTest (#5867)

* Convert test_mapping to PyTest.

* Convert integration.plot to PyTest.

* Convert unit/fileformats/structured_array_identification to pytest.

* Review changes.

* pytest migration for unit.common.metadata.test_BaseMetadata (#5868)

* pytest migration for unit.common.metadata.test_BaseMetadata

* review actions

* pytest migration of unit.common.metadata.test_hexdigest (#5874)

* pytest migration of unit.common.metadata.test_metadata_filter (#5875)

* pytest migration for unit.common.metadata.test_CubeMetadata (#5881)

* pytest migration of unit.common.metadata.test_metadata_manager_factory (#5876)

* pytest migration of unit.common.metadata.test_metadata_manager_factory

* review actions

* More root pytest (#5883)

* Convert root test_util to PyTest.

* Convert root test_pp to PyTest.

* Review comments - make tests easier to understand.

* pytest migration of unit.common.metadata.test_CellMeasureMetadata (#5878)

* pytest migration of unit.common.metadata.test_CellMeasureMetadata

* Update lib/iris/tests/unit/common/metadata/test_CellMeasureMetadata.py

Co-authored-by: Patrick Peglar <[email protected]>

* Update lib/iris/tests/unit/common/metadata/test_CellMeasureMetadata.py

Co-authored-by: Patrick Peglar <[email protected]>

* Update lib/iris/tests/unit/common/metadata/test_CellMeasureMetadata.py

Co-authored-by: Patrick Peglar <[email protected]>

* Update lib/iris/tests/unit/common/metadata/test_CellMeasureMetadata.py

Co-authored-by: Patrick Peglar <[email protected]>

* review actions

---------

Co-authored-by: Patrick Peglar <[email protected]>

* pytest migration of unit.common.metadata.test_CoordMetadata (#5880)

* pytest migration of unit.common.metadata.test_CoordMetadata

* review actions

* Update lib/iris/tests/unit/common/metadata/test_CoordMetadata.py

Co-authored-by: Patrick Peglar <[email protected]>

---------

Co-authored-by: Patrick Peglar <[email protected]>

* pytest migration of unit.common.resolve.test_Resolve (#5882)

* pytest migration of unit.common.resolve.test_Resolve

* review actions

* regen lockfiles

* precommit fixes

* fix some test failures

* Added a style guide for iris pytest (#5785)

* Added a draft style guide for iris pytest

* most review comments

* refactored documentation

* fixed doclinks

* reslolved review comments

* removed excess pages

* conversion checklist

* pre-lunch changes

* majority review requests, rough reshuffle of Test Categories

* further reshuffle of Test Categories

* review stuffies

* fixed a coup of review comments

* fixed a doctest failures

* reworded function and class intros

---------

Co-authored-by: Martin Yeo <[email protected]>

* added whatsnew entries (#6211)

* added whatsnew entries

* corrected _ to - in githubname

* whatsnew corrections

---------

Co-authored-by: Martin Yeo <[email protected]>

---------

Co-authored-by: Bill Little <[email protected]>
Co-authored-by: Lockfile bot <[email protected]>
Co-authored-by: stephenworsley <[email protected]>
Co-authored-by: Patrick Peglar <[email protected]>
Co-authored-by: Martin Yeo <[email protected]>
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: Henry Wright <[email protected]>
  • Loading branch information
8 people authored Nov 1, 2024
1 parent 836e179 commit 7bca716
Show file tree
Hide file tree
Showing 158 changed files with 10,234 additions and 9,556 deletions.
56 changes: 56 additions & 0 deletions docs/src/developers_guide/contributing_pytest_conversions.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
.. include:: ../common_links.inc

.. _contributing_pytest_conversions:

*******************************************
Converting From ``unittest`` to ``pytest``
*******************************************

Conversion Checklist
--------------------
.. note::
Please bear in mind the following checklist is for general use; there may be
some cases which require extra context or thought before implementing these changes.

#. Before making any manual changes, run https://github.com/dannysepler/pytestify
on the file. This does a lot of the brunt work for you!
#. Check for references to :class:`iris.tests.IrisTest`. If a class inherits
from this, remove the inheritance. Inheritance is unnecessary for
pytest tests, so :class:`iris.tests.IrisTest` has been deprecated
and its convenience methods have been moved to the
:mod:`iris.tests._shared_utils` module.
#. Check for references to ``unittest``. Many of the functions within unittest
are also in pytest, so often you can just change where the function is imported
from.
#. Check for references to ``self.assert``. Pytest has a lighter-weight syntax for
assertions, e.g. ``assert x == 2`` instead of ``assertEqual(x, 2)``. In the
case of custom :class:`~iris.tests.IrisTest` assertions, the majority of these
have been replicated in
:mod:`iris.tests._shared_utils`, but with snake_case instead of camelCase.
Some :class:`iris.tests.IrisTest` assertions have not been converted into
:mod:`iris.tests._shared_utils`, as these were deemed easy to achieve via
simple ``assert ...`` statements.
#. Check for references to ``setUp()``. Replace this with ``_setup()`` instead.
Ensure that this is decorated with ``@pytest.fixture(autouse=True)``.

.. code-block:: python
@pytest.fixture(autouse=True)
def _setup(self):
...
#. Check for references to ``@tests``. These should be changed to ``@_shared_utils``.
#. Check for references to ``with mock.patch("...")``. These should be replaced with
``mocker.patch("...")``. Note, ``mocker.patch("...")`` is NOT a context manager.
#. Check for ``np.testing.assert...``. This can usually be swapped for
``_shared_utils.assert...``.
#. Check for references to ``super()``. Most test classes used to inherit from
:class:`iris.tests.IrisTest`, so references to this should be removed.
#. Check for references to ``self.tmp_dir``. In pytest, ``tmp_path`` is used instead,
and can be passed into functions as a fixture.
#. Check for ``if __name__ == 'main'``. This is no longer needed with pytest.
#. Check for ``mock.patch("warnings.warn")``. This can be replaced with
``pytest.warns(match=message)``.
#. Check the file against https://github.com/astral-sh/ruff , using ``pip install ruff`` ->
``ruff check --select PT <file>``.

2 changes: 1 addition & 1 deletion docs/src/developers_guide/contributing_running_tests.rst
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,7 @@ experimental dependency not being present.
SKIPPED [1] lib/iris/tests/unit/util/test_demote_dim_coord_to_aux_coord.py:29: Test(s) require external data.
All Python decorators that skip tests will be defined in
``lib/iris/tests/__init__.py`` with a function name with a prefix of
``lib/iris/tests/_shared_utils.py`` with a function name with a prefix of
``skip_``.

You can also run a specific test module. The example below runs the tests for
Expand Down
147 changes: 0 additions & 147 deletions docs/src/developers_guide/contributing_testing.rst

This file was deleted.

4 changes: 2 additions & 2 deletions docs/src/developers_guide/contributing_testing_index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,9 @@ Testing
.. toctree::
:maxdepth: 3

contributing_testing
testing_tools
contributing_tests
contributing_graphics_tests
contributing_running_tests
contributing_ci_tests
contributing_benchmarks
contributing_pytest_conversions
Loading

0 comments on commit 7bca716

Please sign in to comment.