0 follower

הגדרת נתונים התחלתיים

בדיקות אוטומטיות בדרך כלל מתבצעות מספר רב של פעמים. בכדי לוודא שתהליך הבדיקה יכול לחזור על עצמו, אנו נרצה להריץ אתה הבדיקה במצב ידוע הנקרא fixture. לדוגמא, בכדי לבדוק את אפשרות פרסום הודעה באפליקצית בלוג, בכל פעם שאנו מריצים את הבדיקה, הטבלאות השומרות מידע הקשור להודעות (לדוגמא, טבלת ה Post, טבלת ה Comment) יש צורך בלשחזר את הטבלה למצב התחלתי כלשהו. הדוקומנטציה של PHPUnit מתארת באופן מעמיק לגבי התקנת טבלאות קבועות כללית. בחלק זה, אנו בעיקר נתאר כיצד להגדיר מידע קבוע עבור טבלאות, כפי שתארנו בדוגמא.

הגדרת טבלאות קבועות (fixture) הוא אחד החלקים שלוקחים הכי הרבה זמן להגדרה בעבור אפליקציה שמשתמשת במסד נתונים לצורך שמירת מידע. Yii מספקת רכיב בשם CDbFixtureManager בכדי לפשט בעיה זו. רכיב זה מבצע את הפעולות בהבאות בעת הרצת סט של בדיקות:

  • לפני שכל הבדיקות רצות, הרכיב מאפס את כל הטבלאות הרצויות למצב התחלתי וידוע.
  • לפני הרצת מתודת בדיקה אחת, היא מאפסת את הטבלאות הרצויות למצב התחלתי וידוע.
  • במהלך הרצת מתודת בדיקה, היא מאפשרת גישה לשורות הקשורות לאותה בדיקה.

בכדי להשתמש ב CDbFixtureManager, אנו מגדירים אותו קובץ הגדרות האפליקציה בצורה הבאה,

return array(
    'components'=»array(
        'fixture'=»array(
            'class'=»'system.test.CDbFixtureManager',
        ),
    ),
);

לאחר מכן אנו מספקים את המידע אודות הטבלאות הקבועות תחת התיקיה protected/tests/fixtures. ניתן לשנות את התיקיה לתיקיה במיקום אחר על ידי הגדרת המאפיין CDbFixtureManager::basePath בהגדרות האפליקציה. המידע אודות הנתונים ההתחלתיים לטבלאות מסודר כאוסף של קבצי PHP הנקראים קבצי fixture. כל קובץ התחלתי לטבלאות מחזיר מערך המייצג את המידע ההתחלתי לטבלה מסויימת. שם הקובץ הוא זהה לשם הטבלה. להלן דוגמא למידע עבור הטבלה Post הנשמר בקובץ בשם Post.php:

«?php
return array(
    'sample1'=»array(
        'title'=»'test post 1',
        'content'=»'test post content 1',
        'createTime'=»1230952187,
        'authorId'=»1,
    ),
    'sample2'=»array(
        'title'=»'test post 2',
        'content'=»'test post content 2',
        'createTime'=»1230952287,
        'authorId'=»1,
    ),
);

כפי שניתן לראות, ישנם שני שורות של מידע המוחזרות בקוד המוצג למעלה. כל שורה מיוצגת כמערך שמפתחותיו הם שמות העמודות בטבלה והערכים של המפתחות הם הערכים השמורים בעמודות בטבלה. בנוסף, כל שורה מאונדקסת על ידי סטרינג (לדוגמא sample1, sample2) הנקראים שמות מקוצרים לשורות. אחר כך, כשאנו נכתוב סקריפטים לבדיקה, אנו יכולים להתייחס לכל שורה על ידי שמה המקוצר. אנו נסביר לגבי זה בהרחבה בחלק הבא.

כפי שניתן לראות אנו לא מגדירים את העמודה id בקוד למעלה. זה מכיוון שהעמודה id מוגדרת כמפתח ראשי שערכו יתמלא באופן אוטומטי בכל שורה חדשה שנוסיף.

ברגע שהרכיב CDbFixtureManager יקרא בפעם הראשונה, הוא יעבור על כל קבצי הטבלאות הקבועות ויאפס אותם למצב התחלתי. הוא מאפס טבלה על ידי ריקון הטבלה מתוכן, מאפס את המספר העולה של העמודה המכילה את המפתח הראשי בטבלה, ואז מוסיפה את הנתונים מקבצי הטבלאות הקבועים לטבלה.

לפעמים, אנו לא נרצה לאפס כל טבלה המכילה מצב התחלתי כלשהו לפני שאנו מריצים בדיקות, בגלל שאיפוס כמה טבלאות קבועות יכול לקחת הרבה זמן. במקרה זה, אנו יכולים לכתוב סקריפט PHP בכדי לבצע את העבודה ההתחלתית בצורה מותאמת אישית. הסקריפט צריך להשמר בקובץ בשם init.php תחת התיקיה המכילה את קבצי הטבלאות הקבועות. ברגע שהרכיב CDbFixtureManager יזהה את הקיום של קובץ זה, הוא יריץ את הקובץ הזה במקום לאפס כל טבלה.

אפשרות נוספת היא שאנו לא נרצה להשתמש בדרך ברירת המחדל של איפוס טבלה, כלומר, איפוס הטבלה והוספת הנתונים הקבועים לתוכה. למקרה זה, אנו יכולים לכתוב סקריפט התחלתי ספציפית לקובץ 'מידע התחלתי לטבלה' מסויים. הסקריפט צריך להשמר בקובץ PHP תחת שם הטבלה ולאחריו .init.php. לדוגמא, הקובץ ההתחלתי עבור הטבלה Post יהיה Post.init.php. ברגע שהרכיב CDbFixtureManager יזהה שסקריפט זה קיים, הוא יריץ את הסקריפט הזה במקום להריץ את הסקריפט אשר מאפס את הטבלה בצורה הרגילה.

» Tip|טיפ: במידה ויהיו הרבה קבצי 'מידע התחלתי לטבלה' כלומר הרבה קבצים של מצב התחלתי עבור טבלאות, זה יכול לעלות את משך זמן הבדיקה בצורה משמעותית. מסיבה זו, עליך להגדיר קבצי 'מידע התחלתי לטבלה' עבור טבלאות שהתוכן שלהם משתנה בלבד במהלך הבדיקה. טבלאות אשר משמשות עבור קישורים בין טבלה אחת לשנייה תוכנם לא משתנה לכן אין צורך בליצור עבורם קבצי 'מידע התחלתי לטבלה'.

בשני החלקים הבאים, אנו נתאר כיצד להשתמש במצבים ההתחלתיים המנוהלים על ידי CDbFixtureManager בבדיקות יחידה ובדיקות פונקציונליות.

Found a typo or you think this page needs improvement?
Edit it on github !