Python Coding Academy
135 subscribers
7 photos
3 files
4 links
🐍 Learn Python. Build Skills. Create the Future.

📚 Python lessons from beginner to advanced
💻 Clear explanations & real-world examples
🚀 Learn to code. Learn to build.
Download Telegram
🐍 آموزش Python | پست ۲۶۵
استفاده از PropertyMock برای تست Propertyها
در پایتون می‌توانیم با استفاده از @property، متدها را مانند ویژگی‌های معمولی فراخوانی کنیم.
اما هنگام تست چنین ویژگی‌هایی، گاهی لازم است مقدار آن‌ها را بدون اجرای منطق اصلی کنترل کنیم.
برای این کار از PropertyMock در کتابخانه unittest.mock استفاده می‌کنیم.
۱. یک کلاس با Property
class Product:
@property
def price(self):
return 500

استفاده از این ویژگی:
product = Product()

print(product.price)

خروجی:
500

۲. جایگزینی Property با PropertyMock
from unittest.mock import PropertyMock, patch

class Product:
@property
def price(self):
return 500


product = Product()

with patch.object(
Product,
"price",
new_callable=PropertyMock
) as mock_price:

mock_price.return_value = 1000

print(product.price)

خروجی:
1000

در این مثال، مقدار Property به‌صورت موقت تغییر کرده است؛ بدون اینکه کد اصلی آن اجرا شود.
۳. بررسی تعداد دسترسی به Property
با PropertyMock می‌توانیم بررسی کنیم که یک ویژگی چند بار خوانده شده است:
from unittest.mock import PropertyMock, patch

class User:
@property
def name(self):
return "Ali"


with patch.object(
User,
"name",
new_callable=PropertyMock
) as mock_name:

mock_name.return_value = "Test"

user = User()

print(user.name)
print(user.name)

mock_name.assert_called_with()
print(mock_name.call_count)

خروجی:
Test
Test
2

نکته مهم
PropertyMock باید روی کلاس یا شیءای قرار بگیرد که Property از آن تعریف شده است. در مثال بالا، آن را روی کلاس User قرار دادیم.
همچنین برای تغییر مقدار Property از mock_name.return_value و برای بررسی مقداردهی آن می‌توان از mock_name.assert_called_once_with(value) استفاده کرد.
🎯 تمرین
کلاسی به نام Account بسازید که یک Property به نام balance داشته باشد و مقدار اصلی آن 2000 باشد.
سپس با PropertyMock مقدار آن را در تست به 5000 تغییر دهید و بررسی کنید که مقدار اصلی پس از پایان Patch دوباره قابل‌دسترسی باشد.
پست ۲۶۵ از دوره جامع Python 🐍
👍1
🇮🇷 ۱۳ آبان | روز دانش‌آموز و روز مبارزه با استکبار جهانی

۱۳ آبان، یادآور روزهایی است که دانش‌آموزان و دانشجویان ایرانی برای استقلال، آزادی و آینده کشورشان ایستادگی کردند.

این روز فرصتی است برای یادآوری اهمیت آگاهی، علم، تفکر و تلاش نسل جوان در ساختن آینده‌ای بهتر.

ما باور داریم که قدرت واقعی یک ملت، در دانش، آگاهی و توانایی ساختن آن نهفته است.

بیایید با یادگیری، خلاقیت و پیشرفت علمی، سهمی در ساختن آینده داشته باشیم.

🌱 آینده را کسانی می‌سازند که امروز برای یادگرفتن تلاش می‌کنند.

🇮🇷 روز دانش‌آموز گرامی باد.
👍1👎1