מוקיצות קפדניות של Mockito ואת חריג הדק מיותר

1. סקירה כללית

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

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

למידע נוסף על בדיקות עם Mockito, עיין בסדרת Mockito המקיפה שלנו.

2. דקירה קפדנית

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

מאז גרסה 2. +, מוקיטו הציגה תכונות חדשות הדוחפות את המסגרת לקראת "הקפדה". המטרות העיקריות מאחורי זה הן:

  • זיהוי תלויים שאינם בשימוש בקוד הבדיקה
  • צמצם את שכפול קוד הבדיקה ואת קוד הבדיקה הדרוש
  • לקדם בדיקות נקיות יותר על ידי הסרת קוד 'מת'
  • עזרו בשיפור ניתורי הבאגים והפריון

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

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

2.1. קביעת תצורה של תלות קפדניות

מאז Mockito 2. +, נעשה שימוש כברירת מחדל בקפדנות בעת אתחול הלעג שלנו באמצעות:

  • MockitoJUnitRunner
  • MockitoJUnit.rule ()

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

Mockito.mockitoSession () .initMocks (זה). Strictness (Strictness.STRICT_STUBS) .startMocking (); 

נקודה חשובה אחרונה שיש לשים לב היא שב- Mockito 3.0, כל הדקירות יהיו "קפדניות" ותוקפו כברירת מחדל.

3. יוצא מהכלל מיותר דוגמא

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

בואו נסתכל על דוגמה פשוטה:

@Test public void givenUnusedStub_whenInvokingGetThenThrowUnnecessaryStubbingException () {when (mockList.add ("one")). ThenReturn (true); // זה לא ייקרא מתי (mockList.get (anyInt ())). ואז חזור ("שלום"); assertEquals ("הרשימה צריכה להכיל שלום", "שלום", mockList.get (1)); }

כשאנחנו מבצעים בדיקת יחידה זו, Mockito יאתר את הגזע שאינו בשימוש ויזרוק יוצא מהכלל מיותר:

org.mockito.exceptions.misusing.UnnecessaryStubbingException: זוהתה דרישות מיותרות. קוד בדיקה נקי ומתוחזק דורש אפס קוד מיותר. הדקירות הבאות אינן מיותרות (לחץ כדי לנווט לשורת קוד רלוונטית): 1. -> בכתובת com.baeldung.mockito.misusing.MockitoUnecessaryStubUnitTest.givenUnusedStub_whenInvokingGetThenThrowUnecessaryStubbingException (MockitoUnecessaryStubUnitTest.java:37) אנא הסר מיותר. מידע נוסף: javadoc לשיעור ExceptionalStubbingException.

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

למה זה קרה? ובכן, הראשון מתי קריאה מגדירה את הלעג שלנו לחזור נָכוֹן כשאנחנו קוראים לְהוֹסִיף שיטה עם הוויכוח "אחד". עם זאת, לאחר מכן איננו קוראים לשיטה זו במהלך שאר ביצוע בדיקות היחידה.

מוקיטו אומר לנו שזה הראשון שלנו מתי קו מיותר ואולי טעינו בעת קביעת התצורה של התאים שלנו.

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

4. עקיפת דקירה קפדנית

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

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

@Test הציבור בטל שניתןLenientdStub_whenInvokingGetThenThrowUnnecessaryStubbingException () {מקלה (). כאשר (mockList.add ("אחד")). ואז החזר (נכון); מתי (mockList.get (anyInt ())). ואז חזור ("שלום"); assertEquals ("הרשימה צריכה להכיל שלום", "שלום", mockList.get (1)); }

בדוגמה שלעיל, אנו משתמשים בשיטה הסטטית Mockito.lenient () כדי לאפשר את העקיצה הקלה על לְהוֹסִיף השיטה של ​​רשימת המדומה שלנו.

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

5. מסקנה

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

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

כמו תמיד, קוד המקור המלא של המאמר זמין באתר GitHub.


$config[zx-auto] not found$config[zx-overlay] not found