שיטה סטטית מדומה באמצעות JMockit

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

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

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

במדריך זה נחקור כמה מהתכונות הללו.

להקדמה ל- JMockit, אנא עיינו במאמר הקודם שלנו.

2. תלות Maven

נתחיל בתלות של Maven:

 org.jmockit jmockit 1.24 מבחן 

תוכל למצוא את הגרסאות העדכניות ביותר של ספריות אלה ב- Maven Central.

3. שיטה סטטית הנקראת משיטה לא סטטית

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

מחלקה ציבורית AppManager {מנהל בוליאני ציבורי תגובה (שאלה מחרוזת) {החזר AppManager.isResponsePositive (שאלה); } בוליאני סטטי ציבורי isResponsePositive (ערך מחרוזת) {if (value == null) {return false; } int אורך = value.length (); int randomNumber = randomNumber (); אורך החזרה == אקראי מספר? אמת שקר; } private static int randomNumber () {return new Random (). nextInt (7); }}

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

אנו יכולים ללעוג לשיטה סטטית זו באמצעות של JMockit מעמד אנונימי mockit.MockUp.MockUp (איפה T יהיה שם הכיתה) ו @לִלְעוֹג ביאור:

@Test public void givenAppManager_whenStaticMethodCalled_thenValidateExpectedResponse () {MockUp new () {@Mock בוליאני ציבורי isResponsePositive (ערך מחרוזת) {return false; }}; assertFalse (appManager.managerResponse ("מחרוזת כלשהי ...")); }

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

4. בדוק שיטה סטטית פרטית

במקרים ספורים, שיטות אחרות משתמשות בשיטות סטטיות פרטיות של הכיתה:

מחרוזת סטטית פרטית סטטית פרטי ToToInteger (מחרוזת num) {return Integer.parseInt (num); }

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

@Test public void givenAppManager_whenPrivateStaticMethod_thenValidateExpectedResponse () {int response = Deencapsulation.invoke (AppManager.class, "stringToInteger", "110"); assertEquals (110, תגובה); }

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

5. מסקנה

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

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


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