Nunit | בדיקות מבוססות נתונים - Data Driven Tests

פעמים רבות אנו נדרשים לבצע תרחישי בדיקה אוטומטיים על קונפיגורציות משתנות.

היום אדבר ואציג מספר דרכים לביצוע בדיקות אשר מתבססות על פרמטרים.



בדוגמאות אציג:
  1. קבלת פרמטרים רגילים לבדיקה - Parametrized Test
  2. קבלת רשימת פרמטרים לבדיקה - TestCaseSource
  3. קבלת פרמטרים לבדיקה מקובץ חיצוני - External TestCaseSource
הנושא הינו נושא בסיסי ומוכר מאוד בתחום הבדיקות וחשוב להכירו לעומק.

דרישות קדם: תכנות בסיסי בC#, היכרות עם NUnit

תחילה נדבר על תרחיש הבדיקות עליו נתבסס במהלך המדריך




התרחיש בסיסי מאוד - מקבל מספר כפרמטר ומדפיס את המספר בכפולה של 2.

איך התרחיש יקבל מספר כפרמטר?

קבלת פרמטרים רגילים לבדיקה - Parametrized Test

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

[TestCase(123)]
public void DoubleTheNumber(int num)
{
        Console.WriteLine(num * 2);
}

כעת num יקבל את השלם - 123 כפרמטר.

נריץ את הבדיקה ונוכל לצפות בפלט שלה באופן הבא:


זוהי הדרך הבסיסית והפשוטה ביותר להכנסת פרמטרים לTest.

אבל מה אם יהיה לנו יותר מתרחיש בדיקה אחד במחלקה ונרצה להכניס לכולם את אותה רשימת פרמטרים?

קבלת רשימת פרמטרים לבדיקה - TestCaseSource

באמצעות שימוש ב TestCaseSource Attribute נוכל לקרוא לרשימת פרמטרים עליהם ירוץ תרחיש הבדיקה שלנו.

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


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

לא נרצה ליצור רשימה בכל מחלקה ולתחזק אותה נכון?

כאן תידרש היכולת לעבוד עם קובץ פרמטרים חיצוני שאליו כל תרחישי הבדיקה שלנו יפנו.
איך עושים את זה?

קבלת פרמטרים לבדיקה מקובץ חיצוני - External TestCaseSource

ראשית ניצור קובץ csv (בכונן C לצורך העניין) ובו נשים כמה פרמטרים שנרצה באופן הבא:


כעת, ניצור מחלקת עזר בשם TestDataHelper שתכיל את הלוגיקה של קריאת קובץ הקונפיגורציה.


בפעולת ה get של TestCases קראנו את את התוכן של קובץ ה csv שורה אחר שורה והוספנו את הערכים מהקובץ לתוך רשימה.

עכשיו כל מה שנשאר לעשות זה רק לבקש את רשימת הפרמטרים שלנו לTest.

[Test, TestCaseSource(typeof(TestDataHelper),"TestCases")]
public void DoubleTheNumber(int num)
{
         Console.WriteLine(num * 2);
}

הפעם אפשר לראות שהתווסף פרמטר ל TestCaseSourse Attribute - הפרמטר מגדיר את סוג המחלקה ממנה נקבל את הפרמטרים.

וכמובן, נוכל לקמפל את הפרויקט ולראות שכל פרמטר מהקובץ נקרא כTest נפרד לחלוטין.

סיכום

היום דיברנו על תרחישי בדיקה מבוססי נתונים, וראינו 3 דוגמאות שונות להכנסת פרמטרים לתרחיש הבדיקה שלנו:
  1. הכנסת פרמטרים רגילה
  2. הכנסת פרמטרים מרשימה פנימית
  3. הכנסת פרמטרים מקובץ חיצוני
כמובן שתרחישי הבדיקה שהוצגו כאן אינם תרחישי בדיקה אמיתיים מכיוון שלא הייתה שום וולידציה בסוף התרחיש.

במידה ונרצה להשתמש ביכולות שהוצגו בשביל לבצע Data Driven Testing נכלול בטבלה שלנו גם את הערך שאליו נרצה להשוות את תוצאת הריצה.

השימוש ב Parametrized Tests הופך את הבדיקות שלנו לגמישות ומודולריות וחשוב להשתמש ביכולת הזו ולבדוק את המוצר שלנו עבור כמה קונפיגורציות שניתן.

נתראה בפוסט הבא :)

תגובות

  1. What happens if you don't want to have the path to the file hard coded. Can you pass something from the 'Calling' test? Thanks

    השבמחק
    תשובות
    1. Ofcourse, it's even better that way.

      My favorite way to 'pass' something to the test is to use some sort of config file like SettingFile or maybe even create the parameter straight in the app config.

      מחק

הוסף רשומת תגובה

פוסטים פופולריים מהבלוג הזה

תכנות מונחה עצמים | Dependency Inversion Principle

מהם קבצי DLL ואיך להשתמש בהם?

מה ההבדל בין אוטומציה לפיתוח רגיל