GammaCyber

כתיבת קוד — שיעור 21

Testing ו-MVP

כל 2 משימות הקוד שנשמרו מהשיעור מופיעות כאן, עם דרישות, דוגמאות וקוד פתיחה. אפשר לכתוב פתרון בעורך המקומי וללחוץ על „בדיקת AI” לקבלת ציון, רמזים והערות.

T2 · בסיסי250 נק'~18 דק'build
Spy/Mock (בסגנון jest.fn)
ממש מחלקה Spy המדמה את jest.fn(): Spy(return_value=x) יוצר spy; קריאה לו s(*args, **kwargs) מתעדת את הקריאה ומחזירה את return_value; s.call_count = מספר הקריאות; s.called_with(*args, **kwargs) מחזיר True אם ה-spy נקרא אי-פעם עם הארגומנטים האלה.
דוגמאות
s = Spy(return_value=99); s(1,2) → 99
s.call_count → 1
s.called_with(1, 2) → True
פתרון-ייחוס Spy/Mock (בסגנון jest.fn) ›
class Spy: def __init__(self, return_value=None): self.calls = []; self._rv = return_value def __call__(self, *args, **kwargs): self.calls.append((args, kwargs)); return self._rv @property def call_count(self): return len(self.calls) def called_with(self, *args, **kwargs): return (args, kwargs) in self.calls
הפתרון נשמר מקומית אוטומטית.
T3 · בינוני350 נק'~22 דק'build
מנוע הרצת-בדיקות זעיר
ממש run_tests(tests) — לב של Jest. tests היא רשימת זוגות (name, fn). הרץ כל fn: אם לא נזרקה חריגה (כולל AssertionError) — עבר; אחרת נכשל. החזר {'passed':int, 'failed':int, 'failures':[שמות הבדיקות שנכשלו לפי הסדר]}.
דוגמאות
run_tests([('a',pass_fn),('b',fail_fn),('c',pass_fn)]) → {'passed':2, 'failed':1, 'failures':['b']}
פתרון-ייחוס מנוע הרצת-בדיקות זעיר ›
def run_tests(tests: list) -> dict: passed = 0; failures = [] for name, fn in tests: try: fn(); passed += 1 except Exception: failures.append(name) return {'passed': passed, 'failed': len(failures), 'failures': failures}
הפתרון נשמר מקומית אוטומטית.