猿问

在函数外运行命令的python中的模拟脚本

找到一个在函数外导入和运行 aws 的脚本:


$ 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 的错误。


是否可以像这样模拟脚本?


月关宝盒
浏览 114回答 1
1回答

青春有我

刚刚发现不可能模拟boto3or 和整个模块os,但是,可以模拟模块内部的函数。示例:模拟boto3.clientscript.pyimport boto3client = boto3.client("ssm")test.pyfrom unittest.mock import patch, MagicMock@patch("boto3.client")def test_boto(boto3):    import script    assert isinstance(script.client, MagicMock)嘲讽os.environ:script.pyimport ostest.pyfrom unittest.mock import patch@patch("os.environ", {"TEST_ENV": "TEST"})def test_environ():    import script    assert script.os.environ["TEST_ENV"] == "TEST"
随时随地看视频慕课网APP

相关分类

Python
我要回答