Всякий раз, когда файл импортирует import greengrasssdk
, модульные тесты не выполняются, потому что модуль greengrass_common
не существует на моей локальной машине, и я не могу установить его через pip.
Я выполняю тесты с PyCharm,Я пытаюсь протестировать лямбду Greengrass, которая не выполняется локально из-за той же проблемы зависимости (то же исключение).Но как только лямбда переходит в зеленую траву, она работает нормально.
Вот исключение:
import greengrasssdk
File "C:\Python27\lib\site-packages\greengrasssdk\__init__.py", line 6,
in <module>
from .Lambda import StreamingBody
File "C:\Python27\lib\site-packages\greengrasssdk\Lambda.py", line 10, in
<module>
from greengrass_common.function_arn_fields import FunctionArnFields
ImportError: No module named greengrass_common.function_arn_fields
Пример упрощенного кода такой:
import greengrasssdk
import logging
greengrass_iot_client = greengrasssdk.client('iot-data')
logger = logging.getLogger('logger')
def handler(event, context):
logger.info('Event handler invoked with event: ' + str(event))
Я получаю следующее сообщение об ошибке в тесте (Тест исключен в папке теста, но другие проблемы с зависимостями пока не показаны - я пишу это, потому что некоторые разработчики помещают свои тесты в файл кода Python. Я слышал, что эти тесты находятся за пределамифайла исходного кода может привести к проблемам с импортом. Хотя этот случай отличается, поскольку это происходит и в исходном файле кода.)
import unittest
import mock
import function
класс SimpleTest (unittest.TestCase):
# NONE OF THE THREE PATCH WORK Not in combination nor single
@mock.patch('greengrass_common')
@mock.patch('greengrass_common.function_arn_fields')
@mock.patch('greengrasssdk')
def test_that(self):
pass
Контрольный пример пуст для упрощения.
Я ожидаю, что код greengrass_common будет существовать вне кода Greengrass, и я смогу написать модульные тесты.
Я из мира Java, нопоговорил с несколькими разработчиками Python.Мы действительно не нашли решение.(За исключением попытки поймать импорт в производственном коде), но это кажется первым шагом к плохому качеству программного обеспечения во всем проекте.
Я очень благодарен за идеи / решения / подходы и рекомендации.
Большое спасибо:).