Я пытаюсь создать тесты для вспомогательной функции, которая реагирует на успешное импортирование или нет.
Успешный тест работает, но не на неудачный, знаете, почему?
Помощник: домашний помощник / компоненты / owntracks / helper.py
"""Helper for OwnTracks."""
try:
import nacl
except ImportError:
nacl = None
import logging
_LOGGER = logging.getLogger(__name__)
def supports_encryption() -> bool:
"""Test if we support encryption."""
_LOGGER.info(nacl)
return nacl is not None
Мой тест: тесты / компоненты / owntracks / test_helper.py
"""Test the owntracks helper."""
from unittest.mock import patch
import pytest
import logging
from homeassistant.components.owntracks.helper import supports_encryption
_LOGGER = logging.getLogger(__name__)
@pytest.fixture(name="nacl_imported")
def mock_nacl_imported():
"""Mock a successful import."""
with patch("homeassistant.components.owntracks.helper.nacl"):
yield
@pytest.fixture(name="nacl_not_imported")
def mock_nacl_not_imported():
"""Mock non successful import."""
with patch("homeassistant.components.owntracks.helper.nacl") as mock_import:
mock_import.return_value = ImportError()
yield mock_import
def test_supports_encryption(nacl_imported):
"""Test if env supports encryption."""
_LOGGER.info(supports_encryption())
assert supports_encryption()
def test_supports_encryption_failed(nacl_not_imported):
"""Test if env does not support encryption."""
_LOGGER.info(supports_encryption())
assert not supports_encryption()
Также попытался:
with patch("homeassistant.components.owntracks.helper.nacl", return_value=None):
yield
AND
with patch("homeassistant.components.owntracks.helper.nacl", side_effect=ImportError()):
yield
Журналы испытаний:
py.test tests/components/owntracks/test_helper.py
Test session starts (platform: linux, Python 3.7.4, pytest 5.2.2, pytest-sugar 0.9.2)
rootdir: /home/quentin.pollet@sglk.local/Documents/home-assistant, inifile: setup.cfg
plugins: timeout-1.3.3, cov-2.8.1, requests-mock-1.7.0, aiohttp-0.3.0, sugar-0.9.2
collecting ...
tests/components/owntracks/test_helper.py ✓ 50% █████
―――――――――――――――――――――――――――――――― test_supports_encryption_failed ――――――――――――――――――――――――――――――――
nacl_not_imported = <MagicMock name='nacl' id='139733318227280'>
def test_supports_encryption_failed(nacl_not_imported):
"""Test if env does not support encryption."""
_LOGGER.info(supports_encryption())
> assert not supports_encryption()
E assert not True
E + where True = supports_encryption()
tests/components/owntracks/test_helper.py:34: AssertionError
------------------------------------- Captured stderr call --------------------------------------
INFO:homeassistant.components.owntracks.helper:<MagicMock name='nacl' id='139733318227280'>
INFO:tests.components.owntracks.test_helper:True
INFO:homeassistant.components.owntracks.helper:<MagicMock name='nacl' id='139733318227280'>
--------------------------------------- Captured log call ---------------------------------------
INFO homeassistant.components.owntracks.helper:helper.py:14 <MagicMock name='nacl' id='139733318227280'>
INFO tests.components.owntracks.test_helper:test_helper.py:33 True
INFO homeassistant.components.owntracks.helper:helper.py:14 <MagicMock name='nacl' id='139733318227280'>
tests/components/owntracks/test_helper.py ⨯ 100% ██████████
Results (0.15s):
1 passed
1 failed
- tests/components/owntracks/test_helper.py:31 test_supports_encryption_failed
Я новичок в Python, но мотивирован, будь хорошим;)