Rewrite homeassistant unittest tests to pytest style test functions
See original GitHub issueProblem
The homeassistant integration still contains unittest.TestCase
based unit tests. We want to rewrite them to standalone pytest test functions.
Background
The Home Assistant core standard is to write tests as standalone pytest test functions. We still have some old tests that are based on unittest.TestCase
. We want all these tests to be rewritten as pytest test functions.
Here are the docs for pytest: https://docs.pytest.org/en/stable/
Here’s an example of an async pytest test function in Home Assistant core:
There are many pytest fixtures to help writing the tests. See:
- https://docs.pytest.org/en/stable/reference.html#fixtures
- https://github.com/home-assistant/core/blob/dev/tests/conftest.py
- The most common fixture to use is
hass
which will set up aHomeAssistant
instance and start it.
Here’s an example of a pull request that rewrote a module of unittest.TestCase
tests to standalone pytest test functions:
https://github.com/home-assistant/core/pull/40749
Here’s an example command to run a single test module with pytest inside tox on Python 3.8:
tox -e py38 -- --cov-report term-missing --cov=homeassistant.components.command_line.switch tests/components/command_line/test_switch.py
It will print coverage information with lines that are missing coverage.
Prerequisites
- A working development environment.
Task
- Rewrite the tests one module at a time and submit the changes as a pull request to this repository.
- We want to limit the change scope to a single module to not have the pull request be too long, which would take longer time to review.
- Remember to reference this issue in your pull request, but don’t close or fix the issue until all tests for the integration are updated.
Issue Analytics
- State:
- Created 3 years ago
- Comments:7 (3 by maintainers)
Top GitHub Comments
The helpers also need to be converted but may not be as straightforward as the integrations. Please go ahead if you like.
Oh my bad, I assumed we needed
unittest.Mock
to be converted as well. I couldn’t find any instances ofunittest.TestCase
other than the ones used in test helper classes.