testing.py 886 B

12345678910111213141516171819202122232425262728293031323334
  1. from contextlib import contextmanager
  2. from typing import Type
  3. from unittest import mock
  4. from .manage import Manage
  5. @contextmanager
  6. def mock_manage(manage_cls: Type[Manage], skip=()):
  7. """Mock all 'manage_' properties of a Manage class"""
  8. manager = manage_cls()
  9. mocks = {}
  10. for attr_name in dir(manage_cls):
  11. if not attr_name.startswith("manage_") or attr_name in skip:
  12. continue
  13. other_manager = getattr(manager, attr_name)
  14. if not isinstance(other_manager, Manage):
  15. continue
  16. mocks[attr_name] = mock.MagicMock(other_manager)
  17. patchers = [
  18. mock.patch.object(
  19. manage_cls,
  20. name,
  21. new_callable=mock.PropertyMock(return_value=x),
  22. )
  23. for name, x in mocks.items()
  24. ]
  25. for p in patchers:
  26. p.start()
  27. yield
  28. for p in patchers:
  29. p.stop()