每当导入文件import greengrasssdk
时,单元测试都会失败,因为该模块greengrass_common
在我的本地计算机上不存在,我无法通过 pip 安装它。
我正在使用 PyCharm 执行测试。由于相同的依赖问题(相同的异常),我尝试测试的 Greengrass lambda 不会在本地执行。但是一旦将 lambda 推到 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 开发人员交谈过。我们并没有真正找到解决方案。(除了尝试在生产代码中捕获导入),但这似乎是整个项目中软件质量不佳的第一步。
我非常感谢想法/解决方案/方法和指导。
非常感谢 :)。