UnitAutogen؛ تولید خودکار تست برای منطق PostgreSQL

چرا مهم است

اگر منطق برنامه‌ات داخل database اجرا می‌شود، درست بودن هر بخش به‌تنهایی همه‌چیز را نشان نمی‌دهد. یک بخش را بررسی می‌کند، اما زنجیرهٔ اجرای بخش‌ها را با هم می‌سنجد.

قبل از خواندن، این‌ها را بدان۶ مفهوم
unit test

تستی که یک بخش مشخص از برنامه را با ورودی معلوم اجرا می‌کند و نتیجه را با مقدار مورد انتظار می‌سنجد.

در حال نگارش: unit test

Integration Test

تستی که چند بخش مرتبط را کنار هم اجرا می‌کند تا رفتار حاصل از همکاری آن‌ها بررسی شود.

در حال نگارش: Integration Test

deterministic

ویژگی فرایندی که با ورودی و شرایط یکسان، هر بار خروجی یکسانی تولید می‌کند.

در حال نگارش: deterministic

Mock

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

در حال نگارش: Mock

schema

ساختار سازمان‌دهی اشیای database،؜ مانند جدول‌ها و function‌ها، و تعریف‌های مربوط به آن‌ها.

در حال نگارش: schema

Trigger

منطقی در database که در واکنش به رویدادی مانند درج، تغییر یا حذف داده به‌طور خودکار اجرا می‌شود.

در حال نگارش: Trigger

منطق برنامه در PostgreSQL فقط بیرون از database نیست؛ بخشی از آن در function‌ها و Trigger‌ها قرار دارد و در Supabase و Neon بسیاری از این بخش‌ها مستقیماً از مرورگر قابل دسترسی‌اند. UnitAutogen برای این منطق سه نوع تست تولید می‌کند: unit test،؜ Integration Test و تست نشت داده. دادهٔ Mock موردنیاز هر تست را هم خودش می‌سازد.

روش تولید تست‌ها deterministic است، نه مبتنی بر مدل زبانی. ابزار کد هر routine و schema مربوط به آن را می‌خواند و مقدار مورد انتظار را با اجرای همان routine در database واقعی به دست می‌آورد. طبق توضیح منبع، schema یکسان در هر اجرا تست‌های کاملاً یکسان تولید می‌کند. هر تست تنها پس از اجرای موفق نگه داشته می‌شود؛ شاخه‌ای که رفتار آن قابل اثبات نباشد، همراه با دلیل گزارش می‌شود و موفق محسوب نمی‌شود.

برای ساخت unit test،؜ ابزار داده‌ها و ورودی‌هایی را پیدا می‌کند که شرط هر شاخه را درست یا نادرست کنند. خروجی به‌صورت تست‌های استاندارد pgTAP همراه با دادهٔ Mock تولید می‌شود. بررسی function‌ها شامل ورودی معتبر، مقادیر مرزی، دو سمت شرط‌ها، شکل و محتوای نتیجه و جدول‌هایی است که تغییر می‌کنند.

تست Trigger بر اثر رفتارش تمرکز دارد: عملیات INSERT،؜ UPDATE یا DELETE اجرا می‌شود و سپس تغییر همان ردیف، نوشتن در جدول دیگر یا خطای ایجادشده بررسی می‌شود. رفتار غیرقابل‌اثبات کنار گذاشته و گزارش می‌شود.

ابزار با استفاده از plpgsql_check میزان اجرای خط‌ها و شاخه‌ها را اندازه می‌گیرد؛ این بررسی کد اجراشده از طریق dynamic SQL را هم در بر می‌گیرد. unit test و این اندازه‌گیری در Community Edition رایگان قرار دارند.

Integration Test از یک function آغاز می‌شود و فراخوانی‌ها و Trigger‌های ناشی از آن را واقعاً اجرا می‌کند. تست نشت داده نیز بررسی می‌کند که ردیف‌ها یا اطلاعات شخصی به کاربر یا مشتری دیگری، یا به پیام خطا، راه پیدا نکنند.

نکته کلیدی

موفق بودن را با درست بودن کل زنجیره یکی ندان. هنگام خواندن گزارش هم به بخش‌های بررسی‌نشده توجه کن؛ UnitAutogen مواردی را که نمی‌تواند اثبات کند، با دلیل گزارش می‌کند، نه به‌عنوان موفق.

خواندن مقاله اصلی (در زبانه‌ی جدید باز می‌شود)
برچسب‌ها (۴)