logo

שיעורים מופשטים של ריגול או לעג

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

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

כדי לרגל או ללעוג לשיעורים המופשטים, עלינו להוסיף את התלויות הבאות של Maven:

10 חזק של 6
  • JUnit
  • מוקיטו
  • PowerMock

כל התלות הנדרשת של הפרויקט ניתנות להלן:

 junit junit 4.12 test org.mockito mockito-all 1.10.19 test org.powermock powermock-module-junit4 1.7.4 test org.powermock powermock-api-mockito 1.7.0 test 

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

דוגמאות לשיעור מופשט מלגלג

1. ריגול מחלקה מופשטת באמצעות Mockito.spy()

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

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

Abstract1_class.java

 public abstract class Abstract1_class { public abstract int newAbstractmethod(); public String methodUnderTest() { return 'one' ; } } 

שלב 2: צור מקרה מבחן JUnit בשם מופשט1מבחן . הוא מכיל מופע ריגול של המחלקה המופשטת.

Abstract1Test.java

 import static org.junit.Assert.*; import org.junit.Test; import org.mockito.Mockito; import junit.framework.Assert; public class Abstract1Test { @Test public void testing_usingSpy() { Abstract1_class abstclas = Mockito.spy(Abstract1_class.class); String res = abstclas.methodUnderTest(); Assert.assertEquals('one', res); } } 

תְפוּקָה

רקורסיה בג'אווה

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

שיעורים מופשטים של ריגול או לעג

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

2. מחלקה מופשטת לועגת באמצעות Mockito.mock()

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

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

שלב 1: צור מחלקה מופשטת בשם Abstract_Class שמכילה מתודות מופשטות ולא מופשטות.

Abstract_Class.java

 public abstract class Abstract_Class { public String sayMock() { return 'Hii.. ' + getName() + symbol() ; } private String symbol() { return '!!'; } protected abstract String getName(); } 

שלב 2: צור מקרה מבחן JUnit בשם מבחן מופשט על הלעג למעמד המופשט.

AbstractTestClass.java

 import static org.junit.Assert.*; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import org.junit.Test; public class AbstractTestClass { @Test public void test_AbstractClasses() { Abstract_Class ac = mock(Abstract_Class.class); when(ac.sayMock()).thenCallRealMethod(); when(ac.getName()).thenReturn('Jyotika'); assertEquals('Hii.. Jyotika!!', ac.sayMock()); } } 

בקוד למעלה, ו הוא מופע לעג שנוצר באמצעות שיטת Mockito.mock() .

תְפוּקָה

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

שיעורים מופשטים של ריגול או לעג

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

3. מחלקה מופשטת מלגלגת באמצעות PowerMock

בדוגמה הבאה, נשתמש בשיטת PowerMockito.mock() כדי ללעוג למחלקות המופשטות. השימוש ב-PowerMock במקום ב-Mockito.mock() הוא גישה טובה יותר מכיוון שהיא יכולה לשלוט על השיטות הפרטיות והסטטיות.

שלב 1: צור מחלקה מופשטת בשם מופשט_כיתה שמכיל שיטות מופשטות ולא מופשטות כאחד.

Abstract_class.java

 public abstract class Abstract_Class { public abstract int myAbstractMethod(); public String sayMock() { return getName() + '13' ; } private String getName() { return 'Jyotika'; } } 

שלב 2: צור מקרה מבחן JUnit בשם מבחן מופשט למטרות בדיקה.

AbstractTestClass.java

ריבוי הליכי ג'אווה
 import static org.junit.Assert.*; import org.junit.Test; import org.junit.runner.RunWith; import org.powermock.api.mockito.PowerMockito; import org.powermock.core.classloader.annotations.PrepareForTest; import org.powermock.modules.junit4.PowerMockRunner; @RunWith(PowerMockRunner.class) @PrepareForTest( Abstract_Class.class) public class AbstractTestClass { @Test public void test_AbstractClassesusing_PowerMock() throws Exception { // given Abstract_Class ac = PowerMockito.mock(Abstract_Class.class); PowerMockito.doCallRealMethod().when(ac).sayMock(); PowerMockito.doReturn('Sharma').when(ac , 'getName'); //when String newstring = ac.sayMock(); //then assertEquals('Sharma13', newstring); System.out.println(newstring); } } 
כאן, ביקשנו מה-PowerMock להדביק את ערכי ההחזרה של השיטה הפרטית כדי שנוכל לבדוק את שיטת sayMock() ללא כל מניעה לבדיקה. Mockito לבדו לא יכול לבטל את השיטה הזו, לכן השתמשנו ב- PowerMock יחד עם Mockito.

תְפוּקָה

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

שיעורים מופשטים של ריגול או לעג