PowerMock היא מסגרת Java בקוד פתוח המשמשת ליצירת אובייקט מדומה בבדיקת יחידות. זה מרחיב מסגרות לעג אחרות כגון EasyMock ו- Mockito כדי לשפר את היכולות. המסגרת של PowerMock משתמשת בטכניקות מניפולציה של כיתות מותאמת אישית ובטכניקות של קוד בתים כדי לאפשר לעג לשיטות סטטיות, מחלקות סופיות, שיטות סופיות, שיטות פרטיות, בנאי והסרה של מאתחלים סטטיים. המטרה העיקרית של PowerMock היא להרחיב את ממשקי ה-API הקיימים עם כמה שיטות והערות כדי לספק תכונות נוספות שהופכות את בדיקת יחידות לקלה למדי.
מסגרת PowerMock מספקת מחלקה בשם PowerMockito משמש ליצירת אובייקטים מדומים ומתחיל אימות וציפייה. ה-PowerMockito מספק את הפונקציונליות לעבודה עם ה-API של Java Reflection.
בואו נבין את הרעיון של PowerMock בעזרת דוגמה.
דוגמה של PowerMock עם Mockito
כאן, אנו הולכים ליצור דוגמה של PowerMock עם מסגרות Mockito ו-JUnit. כדי ליצור דוגמה באמצעות PowerMock, עלינו לעבור את השלבים הבאים.
שלב 1: הוסף את תלויות PowerMock הבאות בקובץ pom.xml.
תוכנית ג'אווה פשוטה
org.powermock powermock-api-mockito 1.7.0 test org.powermock powermock-module-junit4 1.7.0 test
שלב 2: החל את הערות PowerMock
כדי להשתמש ב- PowerMock עם Mockito, עלינו ליישם את הדברים הבאים שתיים הערות במבחן:
@RunWith(PowerMockRunner.class): זה זהה לזה שהשתמשנו בדוגמאות הקודמות שלנו. ההבדל היחיד הוא שבדוגמה הקודמת השתמשנו ב-MockitoUnitRunner.class, כעת נשתמש ב-PowerMockRunner.class להפעלת ה-API של PowerMockito בבדיקה.
@PrepareForTest: זה אומר ל-PowerMock להכין כמה שיעורים לבדיקה. ניתן ליישם אותו הן על כיתות הבדיקה והן על שיטות הבדיקה הבודדות. הוא כולל שיעורים עם שיטות סופיות, סטטיות, פרטיות או מקוריות שניתן ללגלג עליהן.
@RunWith(PowerMockRunner.class) @PrepareForTest(Utility.class) public class Powermock_test { }
הערה: שני השלבים לעיל הם חובה עבור כל הדוגמאות שאנו הולכים ליצור באמצעות PowerMock.
ישנן דוגמאות להלן של PowerMock עם מסגרות Mockito ו-JUnit.
1. לעג סטָטִי שיטות
בדוגמה הבאה, אנחנו הולכים ללעוג סטָטִי שיטות.
שלב 1: צור מחלקה המכילה א סטָטִי שיטה. יצרנו כיתה עם השם תוֹעֶלֶת.
פתיחת רוכס בלינוקס
Utility.java
מיפוי בכתב דפוס
public class Utility { public static String staticMethod(String call) { return call; } }
שלב 2: צור מקרה מבחן JUnit, בשם Powermock_test, למטרת בדיקה.
Powermock_test.java
import static junit.framework.Assert.assertEquals; 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(Utility.class) public class Powermock_test { @Test public void TestStaticMethod_WithPowerMockito() { String call = ' Hi there, I'm using PowerMock with Mockito '; String callexpectation = ' Call Expectation for you. '; PowerMockito.mockStatic(Utility.class); PowerMockito.when(Utility.staticMethod(call)).thenReturn(callexpectation); String actualcall = Utility.staticMethod(call); assertEquals(callexpectation, actualcall); } }
תְפוּקָה
הפלט הבא מראה שהבדיקה פועלת בהצלחה.
אנו יכולים גם לוודא שהמתודה הסטטית נקראת או לא, על ידי שימוש ב- verifyStatic() שיטת PowerMockito, כפי שמוצג להלן.
PowerMockito.verifyStatic(); Utility.staticMethod(call);
2. לעג פְּרָטִי שיטות
בדוגמה הבאה, ניצור לעג של פְּרָטִי שיטות.
שלב 1: צור מחלקה המכילה שיטה פרטית. יצרנו כיתה עם השם תוֹעֶלֶת והגדיר א פְּרָטִי שיטה ושיטה ציבורית (המחזירה את אובייקט השיטה הפרטית).
Utility.java
public class Utility { private String privateMethod(String message) { return message; } public String callPrivateMethod(String message) { return privateMethod(message); } }
שלב 2: צור מקרה מבחן JUnit בשם PowerMock_test למטרת בדיקה.
הצהרת java switch
Powermock_test.java
import static junit.framework.Assert.assertEquals; 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(Utility.class) public class Powermock_test { @Test public void TestPrivateMethod_WithPowerMock() throws Exception { String message = ' PowerMock with Mockito and JUnit '; String expectedmessage = ' Using with EasyMock '; Utility mock =PowerMockito.spy(new Utility()); PowerMockito.doReturn(expectedmessage).when(mock, 'privateMethod', message); String actualmessage = mock.callPrivateMethod(message); assertEquals(expectedmessage, actualmessage); System.out.println(PowerMockito.verifyPrivate(getClass())); } }
תְפוּקָה
הפלט הבא מראה שהבדיקה פועלת בהצלחה.
3. לעג סופי שיטות
בדוגמה הבאה, אנחנו הולכים ללעוג סופי שיטות.
שלב 1: צור מחלקה המכילה א סופי שיטה. יצרנו מחלקה בשם Utility והגדרנו שיטה סופית בשם שיטה סופית.
איזה חודשים יש ברבע 3
Utility.java
public class Utility { public final String finalMethod(String message) { return message; } }
שלב 2: צור מקרה מבחן JUnit בשם Powermock_test למטרות בדיקה.
Powermock_test.java
import static junit.framework.Assert.assertEquals; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mockito; import org.powermock.api.mockito.PowerMockito; import org.powermock.core.classloader.annotations.PrepareForTest; import org.powermock.modules.junit4.PowerMockRunner; @RunWith(PowerMockRunner.class) @PrepareForTest(Utility.class) public class Powermock_test { @Test public void TestFinalMethod_WithPowerMock() throws Exception { String message = ' PowerMock with Mockito and JUnit '; Utility uti = PowerMockito.mock(Utility.class); PowerMockito.whenNew(Utility.class).withNoArguments().thenReturn(uti); Utility uti2 = new Utility(); PowerMockito.verifyNew(Utility.class).withNoArguments(); PowerMockito.when(uti2.finalMethod(message)).thenReturn(message); String message2 = uti2.finalMethod(message); Mockito.verify(uti2).finalMethod(message); assertEquals(message, message2); } }
תְפוּקָה
הפלט הבא מראה שהבדיקה פועלת בהצלחה.