ההבדל בין כשל לשגיאה ב- JUnit

1. הקדמה

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

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

2. קוד לדוגמא

בואו ניקח בחשבון דוגמה מאוד פשטנית, כלומר מחלקת מחשבון שיש לה שיטה אחת לחלק שתיים לְהַכפִּיל ערכים:

מחלק כפול סטטי ציבורי מספרים (דיבידנד כפול, מחלק כפול) {אם (מחלק == 0) {זורק אריתמטיקה חדשה ("חלוקה באפס!"); } להחזיר דיבידנד / מחלק; }

ציין זאת ג'אווה לא ממש זורקת חישוב חשבון לבד עבור לְהַכפִּיל חלוקה - היא חוזרת אינסוף אוֹ NaN.

3. כישלון לדוגמא

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

בדוגמה הבאה, הקביעה תיכשל, מכיוון שתוצאת החלוקה היא 2 ולא 15. הקביעה שלנו והתוצאה בפועל פשוט לא תואמות:

@Test בטל כאשר DivideNumbers_thenExpectWrongResult () {תוצאה כפולה = SimpleCalculator.divideNumbers (6, 3); assertEquals (15, תוצאה); }

4. שגיאה לדוגמא

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

בואו נראה דוגמה שבה הבדיקה תיפסל עם שגיאה מכיוון שאנו מנסים לחלק באפס שממנו אנו שומרים במפורש על ידי השלכת חריג בקוד המחשבון שלנו:

@Test בטל כאשר DivideByZero_thenThrowsException () {SimpleCalculator.divideNumbers (10, 0); } 

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

@Test בטל כאשר DivideByZero_thenAssertException () {assertThrows (ArithmeticException.class, () -> SimpleCalculator.divideNumbers (10, 0)); }

ואז, אם יוצא מן הכלל, הבדיקה עוברת, אך אם לא אז זה יהיה כישלון נוסף.

5. מסקנה

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

כמו כן, אנא בדוק את קוד הדוגמה ב- GitHub.