JUnit

מתוך המכלול, האנציקלופדיה היהודית
קפיצה לניווט קפיצה לחיפוש
JUnit
צילום מסך של JUnit v4 בתוך סביבת הפיתוח Eclipse.
צילום מסך של JUnit v4 בתוך סביבת הפיתוח Eclipse.
מפתח קנט בק ואריך גמא
גרסה אחרונה 4.12 (4 בדצמבר 2014)
מערכת הפעלה חוצה-פלטפורמות
סוג רישיון Common Public License Version 1.0
קטגוריה בדיקות תוכנה
junit.org

Junit, כלי פתוח וחופשי לבדיקות יחידה בשפת התכנות Java. הכלי פותח במשותף על ידי קנט בק ואריך גמא כחלק מעבודתם בנושא פיתוח מונחה-בדיקות ופיתוח תוכנה זריז. JUnit מתבסס על עבודה מוקדמת יותר של קנט בק בכלי SUnit שיועד לשפת התכנות Smalltalk. הכלי הורחב בהמשך לשפות תכנות רבות נוספות ומהווה, נכון לשנת 2007, נדבך יסודי בעבודת התכנות של מתכנתים רבים בעולם.

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

תמיכה מובנית בכלי הבניה Ant ו-Maven מאפשרת להריץ בקלות קבוצה של בדיקות JUnit כחלק מהליך הבניה של המערכת הנבדקת.

דוגמה לבדיקת יחידה

הדוגמה הבאה מציגה תוכנית בדיקה פשוטה בשפת התכנות Java. התוכנית עושה שימוש בספריית הפיתוח של JUnit v4. מטרת הבדיקה היא לבדוק נכונות של ביטוי אריתמטי פשוט. בעת הרצת הבדיקה, ייצור הכלי מופע חדש של המחלקה, ויריץ את המתודות המבוארות ב-@Test, אחת אחרי השנייה. בגמר הריצה, יציג הכלי הגרפי את תוצאות הריצה בצורה ברורה באמצעות פס החיווי.

public class HelloJUnitWorld {
 @Test 
 public void testMultiplication() {
 // Testing if 3*2=6
 assertEquals ("Multiplication", 6, 3*2);
 }
}

שיטות ביאור


הסבר פונקציית ביאור
מסמל שהפונקציה היא פונקציית בדיקה
@Test
פונקציה שתרוץ לפני כל בדיקה. פונקציה זו יכולה להכין את סביבת הבדיקה (למשל: לקרוא את נתוני הקלט, לאתחל את המחלקה)
@Before
פונקציה שתרוץ לאחר כל בדיקה. פונקציה זו יכולה לנקות את סביבת הבדיקה (למשל: למחוק נתונים זמניים, לשחזר ברירת מחדל). בנוסף יכולה לחסוך בזיכרון על ידי ניכוי מבני נתונים יקרים.
@After
פונקציה זו מתבצעת פעם אחת, לפני תחילת כל הבדיקות. יכול לשמש לביצוע פעולות שדורשות זמן כגון חיבור למסדי נתונים. צריכה להיות מוגדרת כסטטית.
@BeforeClass
פונקציה זו מתבצעת פעם אחת, לאחר שכל הבדיקות הסתיימו. יכול לשמש לביצוע פעולות ניקוי למשל התנתקות מבסיס נתונים. צריכה להיות מוגדרת כסטטית.
@AfterClass
מתעלם מפונקציית הבדיקה. שימושי כאשר הקוד הבסיסי השתנה ומקרי הבדיקה עדיין לא אומצו או שזמן בדיקה זה יותר מידי גדול מלהיכלל
@Ignore
הבדיקה תיכשל אם הפונקציה לא תזרוק את השגיאה הצפויה
@Test (expected = Exception.class)
הבדיקה תיכשל אם הפונקציה רצה יותר מ 100 אלפיות השנייה (milliseconds)
@Test(timeout=100)

בדיקה אם הפונקציה עברה את הבדיקה

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

  • על ידי בדיקת ביטויים בוליאנים.
  • על ידי השוואת סוגים בסיסיים.
  • על ידי השוואת משתנים (by reference).
  • על ידי השוואת מערכים (by reference).


סוגים של Assert שניתנים לשימוש:

  • assertNotNull(String message, Object object);
  • assertNotSame(Object expected, Object actual);
  • assertNotSame(String message, Object expected, Object actual);
  • assertNull(Object object);
  • assertNull(String message, Object object);
  • assertSame(Object expected, Object actual);
  • assertSame(String message, Object expected, Object actual);
  • assertTrue(boolean condition);
  • fail(String message);
  • assertEquals(Type expected, Type actual);
  • assertEquals(Type expected, Type actual, Type delta);
  • assertEquals(Stringmessage, Type expected, Type actal);
  • assertEquals(String message, Type expected, Type actual, Typedelta);
  • assertFalse(boolean condition);
  • assertFalse(String message, boolean condition);
  • assertNotNull(Object object);
  • assertTrue(String message, boolean condition);
  • fail();

אופן הרצת הבדיקות

הרצת הבדיקות ב JUnit מתבצעת בתוך הEclipse ואין צורך להתקין תוספים נוספים.

השוואה בין JUnit ל NUnit

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

מאפיין NUnit JUnit
שפת פיתוח C# Java
מערכת הפעלה Net, Mono רב פלטפורמי
תחילת שימוש שימוש חיצוני- בפעם הראשונה דורש התקנה של .Nunit וכל פעם יש צורך בהוספת קובץ dll לפרויקט שימוש פנימי –על ידי הוספת jar של Junit לפרויקט
יצירת test class יצירת מחלקת בדיקות באופן ידני. אין תלות במחלקה ספציפית יצירת מחלקת בדיקות באופן אוטומטי על ידי Junit Test Case
הרצת הבדיקות דרך תוכנה חיצונית של Nunit (ניתן להריץ מתוך Visual studio על ידי התקנת תוספים) מתוך eclipse על ידי run As JunitTest
סימון פונקציות בדיקה לפני הפונקציה תגים מותאמים שם הפונקציה מתחילה במילה test
Assertion class יש לקרוא לפונקציית Assert באמצעות פונקציה סטטית קריאה לפונקציית Assert ישירות
פונקציות ביאור Annotations לפני הפונקציה נגדיר את סוג הפונקציה על ידי [ ] לפני הפונקציה נגדיר את סוג הפונקציה על ידי @

לקריאה נוספת

קישורים חיצוניים