6.1 स्टॅटिक पद्धतीची थट्टा करणे mockStatic()
आणि आणखी एक महत्त्वाचा मुद्दा म्हणजे थट्टा करणे आणि स्थिर पद्धतींचे सत्यापन. "त्यात काय चूक आहे?" तुम्ही विचारता. होय, स्थिर, परंतु पद्धती समान आहेत. आणि तुमची चूक होईल.
लक्षात ठेवा आम्ही नकली वस्तूंबद्दल कुठे शिकायला सुरुवात केली? द्वारे या वस्तू कृत्रिमरित्या तयार केल्या जात असल्याने DynamicProxy
. आणि स्टॅटिक पद्धती कोणत्याही ऑब्जेक्ट्सशी बांधील नसतात आणि त्यांच्याद्वारे कॉल इंटरसेप्ट करणे DynamicProxy
अशक्य आहे . इतकंच.
परंतु मोकीटोचे निर्माते येथेही चकमा देण्यास सक्षम होते - त्यांनी त्यांचे स्वतःचे वर्ग लोडर लिहिले आणि त्याच्या मदतीने ते फ्लायवर वर्ग बदलू शकले. एक मोठे आणि कठीण काम, परंतु तरीही ते ते करू शकले.
तुम्हाला यामध्ये अतिरिक्त लायब्ररी जोडण्याची आवश्यकता असेल pom.xml
:
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-inline</artifactId>
<version>4.2.0</version>
<scope>test</scope>
</dependency>
तुम्हाला स्टॅटिक पद्धतीची थट्टा करायची असल्यास कसे कार्य करावे ते येथे आहे.
1 एक विशेष मॉक क्लास ऑब्जेक्ट तयार करा:
MockedStatic<ClassName>managerObject = Mockito.mockStatic(ClassName.class);
2 या ऑब्जेक्टमध्ये ऑपरेशन नियम जोडा:
नियमाच्या या ऑब्जेक्टला इतर मार्गांनी चिकटून राहणे आवश्यक आहे.
managerObject.when(ClassName::method name).thenReturn(result);
3 या ऑब्जेक्टचा वापर गुंडाळल्याचेtry-with-resources
सुनिश्चित करा जेणेकरून ऑब्जेक्ट ताबडतोब हटविला जाईल आणि मोकीटो त्याच्याशी संबंधित नियम साफ करू शकेल.
उदाहरण:
@Test
void givenStaticMethodWithNoArgs () {
try (MockedStatic< StaticUtils> utilities = Mockito.mockStatic( StaticUtils.class)) {
// add rule
utilities.when(StaticUtils::name).thenReturn("Hello");
// check if the rule works
assertEquals("Hello", StaticUtils.name());
}
}
भाष्यांइतके सुंदर नाही @Mock
आणि @Spy
, परंतु अतिशय व्यावहारिक. चाचण्या लिहिणे खूप कठीण होते जेव्हा चाचणी अंतर्गत पद्धतींमध्ये वापरल्या जाणार्या साध्या स्थिर पद्धतीची थट्टा करणे अशक्य होते.
GO TO FULL VERSION