برنامه نویسی

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

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
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

✅دیگر از سردرد تمسخرآمیز و وصله ای خبری نیست.

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا