आप जो करना चाहते हैं वह 1 और 2 के भाग का एक संयोजन है।
किसी वर्ग के सभी स्थिर तरीकों के लिए स्थैतिक मॉकिंग को सक्षम करने के लिए आपको PowerMockito.mockStatic का उपयोग करने की आवश्यकता है । इसका मतलब यह है कि जब-तब पुनर्जन्म वाक्यविन्यास का उपयोग करके उन्हें स्टब करना संभव है।
लेकिन जो आप मॉकिटो / पावरमॉक करते हैं, उसके लिए एक डिफ़ॉल्ट रणनीति की आपूर्ति करते हुए मॉकस्टैटिक के 2-तर्क अधिभार का उपयोग करना चाहिए जब आप ऐसी विधि कहते हैं जिसे आपने मॉक उदाहरण पर स्पष्ट रूप से नहीं लिखा है।
से जावाडोक :
इंटरैक्शन के लिए इसके जवाब के लिए एक निर्दिष्ट रणनीति के साथ क्लास मॉक बनाता है। यह काफी उन्नत सुविधा है और आमतौर पर आपको सभ्य परीक्षण लिखने के लिए इसकी आवश्यकता नहीं होती है। हालांकि यह विरासत प्रणालियों के साथ काम करते समय मददगार हो सकता है। यह डिफ़ॉल्ट उत्तर है, इसलिए इसका उपयोग केवल तभी किया जाएगा जब आप विधि कॉल को स्टब नहीं करेंगे।
डिफ़ॉल्ट डिफ़ॉल्ट छोटा करते रणनीति सिर्फ वापसी अशक्त, 0 या वस्तु, संख्या के लिए गलत पर है और महत्वपूर्ण तरीकों बूलियन। 2-arg अधिभार का उपयोग करके, आप कह रहे हैं "नहीं, नहीं, नहीं, डिफ़ॉल्ट रूप से डिफ़ॉल्ट मान प्राप्त करने के लिए इस उत्तर उपवर्ग की उत्तर विधि का उपयोग करें। यह एक लंबा लौटाता है, इसलिए यदि आपके पास स्थिर विधियां हैं जो कुछ असंगत वापस आती हैं। लंबे समय से, एक समस्या है।
इसके बजाय, स्थैतिक विधियों के स्टबिंग को सक्षम करने के लिए मॉकस्टैटिक के 1-आरजी संस्करण का उपयोग करें, फिर किसी विशेष विधि के लिए क्या करना है यह निर्दिष्ट करने के लिए जब-तब पुन: उपयोग करें। उदाहरण के लिए:
import static org.mockito.Mockito.*;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.invocation.InvocationOnMock;
import org.mockito.stubbing.Answer;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
class ClassWithStatics {
public static String getString() {
return "String";
}
public static int getInt() {
return 1;
}
}
@RunWith(PowerMockRunner.class)
@PrepareForTest(ClassWithStatics.class)
public class StubJustOneStatic {
@Test
public void test() {
PowerMockito.mockStatic(ClassWithStatics.class);
when(ClassWithStatics.getString()).thenReturn("Hello!");
System.out.println("String: " + ClassWithStatics.getString());
System.out.println("Int: " + ClassWithStatics.getInt());
}
}
स्ट्रिंग-वेल्यूड स्टैटिक मेथड "हेलो!" को वापस करने के लिए स्टबल किया जाता है, जबकि इंट-वेल्यूड स्टैटिक मेथड डिफॉल्ट स्टबिंग का उपयोग करता है, 0 लौटाता है।