Java में Testing परिचय
Maria Milusheva
Senior Software Engineer
पिछले पाठ में डिपेंडेंसी फ्लो याद करें: करेंसी एक्सचेंज ऐप बैंक सर्वर पर निर्भर है:

कैलकुलेशंस वेरिफाई करना असंभव है क्योंकि करेंसी एक्सचेंज रेट्स स्वभाव से अनपेक्षित होते हैं.
Mocking - ऐसे सिम्युलेटेड ऑब्जेक्ट्स या बिहेवियर्स बनाना जो असली ऑब्जेक्ट्स की जगह टेस्ट में इस्तेमाल हों, ताकि बाहरी डिपेंडेंसी पर निर्भर हुए बिना टेस्ट कर सकें।
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;

पिछला पाठ देखें:
public double convertEuroTo(String currency, double amount) {
double rate = this.bank.getRateEuroTo(currency);
return amount * rate;
}
➡ टेस्टिंग के लिए EuropeanCentralBankServer का प्रिडिक्टेबल ऑब्जेक्ट बनाएँ
मॉक्स के साथ ऐसे टेस्ट करते हैं:
@Test void convert_returnsExpectedValue() { EuropeanCentralBankServer bank = mock(EuropeanCentralBankServer.class); ExchangeApp exchangeApp = new ExchangeApp(bank);// मॉक को प्रोग्राम करना होगा ताकि यह काम करे when(bank.getRateEuroTo("USD")).thenReturn(1.1);// मॉक ऑब्जेक्ट से getRateEuroTo कॉल होगा, हमारी प्री-प्रोग्राम्ड वैल्यूज़ मिलेंगी double result = exchangeApp.convertEuroTo("USD", 1000); assertEquals(1100, result); // अब हम एक्ज़ैक्ट रिटर्न वैल्यू पर assert कर सकते हैं }
हमें अपने मॉक्स को प्रोग्राम करना कभी नहीं भूलना चाहिए:
@Test
void convert_returnsExpectedValue() {
EuropeanCentralBankServer bank = mock(EuropeanCentralBankServer.class);
ExchangeApp exchangeApp = new ExchangeApp(bank);
// कोई मॉक प्रोग्रामिंग नहीं - मॉक बैंक ऑब्जेक्ट को getRateEuroTo का जवाब देना नहीं आता
double result = exchangeApp.convertEuroTo("USD", 1000);
assertEquals(1100, result); // मॉक सेटअप न होने से फेल होगा
}
टेस्ट इस तरह फेल होता है:
org.opentest4j.AssertionFailedError:
Expected :1100.0
Actual :0.0
मॉक को प्रोग्राम करना stubbing कहलाता है।
Stubbing - टेस्ट के दौरान की जाने वाली कॉल्स के लिए न्यूनतम, पहले से तय जवाब देना, और आमतौर पर टेस्ट में प्रोग्राम की गई चीज़ों से बाहर की कॉल्स का जवाब न देना।
Mockito से आप एरर परिदृश्य भी सिम्युलेट कर सकते हैं:
EuropeanCentralBankServer bank = mock(EuropeanCentralBankServer.class);
ExchangeApp exchangeApp = new ExchangeApp(bank);
// thenReturn() की जगह thenThrow() इस्तेमाल करें
when(bank.getRateEuroTo("USD"))
.thenThrow(new RuntimeException("Bank server unavailable."));
exchangeApp.convertEuroTo("USD", 1000); // getRateEuroTo exception थ्रो करेगा
Java में Testing परिचय