چگونه مسخره یا واردات پایتون خود را اشکال زدایی کنیم

Summarize this content to 400 words in Persian Lang
اگر 20 دقیقه برای ساختن یک ویژگی وقت گذاشته اید، دست بالا بگیرید، سپس 2 ساعت آن را آزمایش کنید 🙋. من اخیراً با مسخره کردن یک شی که به صورت جهانی در فایلی که در حال آزمایش بودم، اعلام شده بود، مشکل داشتم. این باعث میشد که تمام آزمایشهای من شکست بخورد زیرا اینطور است __init__ متد با AWS تماس گرفت که در هر جایی که تست اجرا شد، اعتبار مناسبی نداشت.
به دلیل ساختار نسبتاً پیچیدهام دایرکتوری، من در تلاش بودم تا دقیقاً ماژول مناسبی برای تمسخر پیدا کنم. شما ممکن است این بخش نسبتاً ساده محل مسخره کردن را در اسناد واحد تست خوانده باشید، اما در اینجا نحوه تشخیص مکان برای هر سناریو، مهم نیست که چقدر پیچیده باشد، آمده است.
من ابتدا در MyClient.py برای تماس با مشتری AWS نظر دادم. همانطور که در سطح جهانی نامیده شد NoCredentialsError باعث می شد تمام تست های من قبل از اجرای هر روش یا آزمایشی با شکست مواجه شوند 😵💫. سپس من را بررسی کردم sys.modules دیکت حاوی تمام ماژول هایی است که فایل آزمایشی شما می تواند ببیند و مسیر رسیدن به آنها.
# test_app.py
import sys
import json
def test_lambda_handler():
print(sys.modules)
assert True == False
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
ماژول های خود را در پایین نشان می دهد.
…
“boto3.resources.factory”: “boto3.resources.factory” from “/usr/local/lib/python3.11/site-packages/boto3/resources/factory.py”>,
“boto3.session”: “boto3.session” from “/usr/local/lib/python3.11/site-packages/boto3/session.py”>,
“boto3”: “boto3” from “/usr/local/lib/python3.11/site-packages/boto3/__init__.py”>,
“hello_world.util”: “hello_world.util” from “/Users/sophiewarner/repos/project/hello_world/util.py”>,
“hello_world.service.my_client”: “hello_world.service.my_client” from “/Users/sophiewarner/repos/project/hello_world/service/slack_client.py”>,
“hello_world.app”: “hello_world.app” from “/Users/sophiewarner/repos/project/hello_world/app.py”>
}
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
از اینجا فقط می توانید چیزی را جایگزین کنید sys فکر می کند در آن مسیر با تمسخر است.
# test_app.py
import sys
import json
from unittest.mock import MagicMock
sys.modules[“hello_world.service.my_client”] = MagicMock()
from hello_world import app
event = {…}
def test_lambda_handler(event):
ret = app.lambda_handler(event, “”)
assert ret[“statusCode”] == 200
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
این به روز رسانی خواهد شد sys.modules برای کل جلسه پایتون یک پیشرفت در این مورد، اصلاح آن فقط برای یک آزمایش است.
# test_app.py
import sys
import json
from unittest.mock import MagicMock, patch
event = {…}
with patch.dict(“sys.modules”, {“hello_world.service.my_client”: MagicMock()}):
def test_lambda_handler(event):
from hello_world import app
ret = app.lambda_handler(event, “”)
assert ret[“statusCode”] == 200
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
✅دیگر از سردرد تمسخرآمیز و وصله ای خبری نیست.
اگر 20 دقیقه برای ساختن یک ویژگی وقت گذاشته اید، دست بالا بگیرید، سپس 2 ساعت آن را آزمایش کنید 🙋. من اخیراً با مسخره کردن یک شی که به صورت جهانی در فایلی که در حال آزمایش بودم، اعلام شده بود، مشکل داشتم. این باعث میشد که تمام آزمایشهای من شکست بخورد زیرا اینطور است __init__
متد با AWS تماس گرفت که در هر جایی که تست اجرا شد، اعتبار مناسبی نداشت.
به دلیل ساختار نسبتاً پیچیدهام دایرکتوری، من در تلاش بودم تا دقیقاً ماژول مناسبی برای تمسخر پیدا کنم. شما ممکن است این بخش نسبتاً ساده محل مسخره کردن را در اسناد واحد تست خوانده باشید، اما در اینجا نحوه تشخیص مکان برای هر سناریو، مهم نیست که چقدر پیچیده باشد، آمده است.
من ابتدا در MyClient.py برای تماس با مشتری AWS نظر دادم. همانطور که در سطح جهانی نامیده شد NoCredentialsError
باعث می شد تمام تست های من قبل از اجرای هر روش یا آزمایشی با شکست مواجه شوند 😵💫. سپس من را بررسی کردم sys.modules
دیکت حاوی تمام ماژول هایی است که فایل آزمایشی شما می تواند ببیند و مسیر رسیدن به آنها.
# test_app.py
import sys
import json
def test_lambda_handler():
print(sys.modules)
assert True == False
ماژول های خود را در پایین نشان می دهد.
...
"boto3.resources.factory": "boto3.resources.factory" from "/usr/local/lib/python3.11/site-packages/boto3/resources/factory.py">,
"boto3.session": "boto3.session" from "/usr/local/lib/python3.11/site-packages/boto3/session.py">,
"boto3": "boto3" from "/usr/local/lib/python3.11/site-packages/boto3/__init__.py">,
"hello_world.util": "hello_world.util" from "/Users/sophiewarner/repos/project/hello_world/util.py">,
"hello_world.service.my_client": "hello_world.service.my_client" from "/Users/sophiewarner/repos/project/hello_world/service/slack_client.py">,
"hello_world.app": "hello_world.app" from "/Users/sophiewarner/repos/project/hello_world/app.py">
}
از اینجا فقط می توانید چیزی را جایگزین کنید sys
فکر می کند در آن مسیر با تمسخر است.
# test_app.py
import sys
import json
from unittest.mock import MagicMock
sys.modules["hello_world.service.my_client"] = MagicMock()
from hello_world import app
event = {...}
def test_lambda_handler(event):
ret = app.lambda_handler(event, "")
assert ret["statusCode"] == 200
این به روز رسانی خواهد شد sys.modules
برای کل جلسه پایتون یک پیشرفت در این مورد، اصلاح آن فقط برای یک آزمایش است.
# test_app.py
import sys
import json
from unittest.mock import MagicMock, patch
event = {...}
with patch.dict("sys.modules", {"hello_world.service.my_client": MagicMock()}):
def test_lambda_handler(event):
from hello_world import app
ret = app.lambda_handler(event, "")
assert ret["statusCode"] == 200
✅دیگر از سردرد تمسخرآمیز و وصله ای خبری نیست.