问题描述
$ cat script.py
import boto3
client = boto3.client("ssm")
...
试图像这样嘲笑,但没有成功:
cat test.py
from unittest.mock import patch
@patch("script.boto3")
def test_boto(boto3):
import script
当我使用pytest运行脚本时,我从AWS收到错误消息。
是否可以像这样模拟脚本?
解决方法
仅发现不可能模拟boto3
或像os
这样的整个模块,但是可以模拟模块内部的功能。
示例:模拟boto3.client
script.py
import boto3
client = boto3.client("ssm")
test.py
from unittest.mock import patch,MagicMock
@patch("boto3.client")
def test_boto(boto3):
import script
assert isinstance(script.client,MagicMock)
嘲笑os.environ
:
script.py
import os
test.py
from unittest.mock import patch
@patch("os.environ",{"TEST_ENV": "TEST"})
def test_environ():
import script
assert script.os.environ["TEST_ENV"] == "TEST"