creating mocks spies mockito with code examples
Mockito जासूस और नकली ट्यूटोरियल:
इस में मॉकिटो ट्यूटोरियल श्रृंखला , हमारे पिछले ट्यूटोरियल ने हमें ए मॉकिटो फ्रेमवर्क का परिचय । इस ट्यूटोरियल में, हम मॉकिटो में मोक्स और जासूस की अवधारणा को जानेंगे।
मोक्स और जासूस क्या हैं?
Mocks और Spies दोनों टेस्ट डबल्स के प्रकार हैं, जो यूनिट टेस्ट लिखने में सहायक हैं।
मोक्स निर्भरता के लिए एक पूर्ण प्रतिस्थापन है और निर्दिष्ट आउटपुट को वापस करने के लिए प्रोग्राम किया जा सकता है जब भी मॉक पर एक विधि कहा जाता है। मॉकिटो मॉक के सभी तरीकों के लिए एक डिफ़ॉल्ट कार्यान्वयन प्रदान करता है।
आप क्या सीखेंगे:
- जासूस क्या हैं?
- बनाना मोक्स
- जासूस बनाना
- टेस्ट के तहत क्लास / ऑब्जेक्ट के लिए मॉकडेंड डिपेंडेंसीज को कैसे इंजेक्ट करें?
- सुझाव और युक्ति
- कोड उदाहरण - जासूस और मोज़े
- सोर्स कोड
- अनुशंसित पाठ
जासूस क्या हैं?
जासूस अनिवार्य रूप से नकली निर्भरता के वास्तविक उदाहरण पर एक आवरण हैं। इसका अर्थ यह है कि इसके लिए वस्तु या निर्भरता के एक नए उदाहरण की आवश्यकता होती है और फिर इसके ऊपर नकली वस्तु का एक आवरण जोड़ा जाता है। डिफ़ॉल्ट रूप से, जासूस ऑब्जेक्ट के वास्तविक तरीकों को कॉल करता है जब तक कि स्टब नहीं किया जाता।
जासूस कुछ अतिरिक्त शक्तियां प्रदान करते हैं जैसे कि विधि कॉल को क्या तर्क दिए गए थे, वास्तविक पद्धति थी जिसे सभी कहा जाता है आदि।
संक्षेप में, जासूसों के लिए:
- वस्तु का वास्तविक उदाहरण आवश्यक है।
- जासूसी वस्तु के कुछ (या सभी) तरीकों को ठूंठ करने की लचीलापन देता है। उस समय, जासूस को अनिवार्य रूप से आंशिक रूप से नकली या ठूंठ वाली वस्तु कहा जाता है या संदर्भित किया जाता है।
- एक जासूसी वस्तु पर कॉल की जाने वाली बातचीत को सत्यापन के लिए ट्रैक किया जा सकता है।
सामान्य तौर पर, जासूसी बहुत बार उपयोग नहीं की जाती है, लेकिन इकाई परीक्षण विरासत अनुप्रयोगों के लिए सहायक हो सकती है, जहां निर्भरता को पूरी तरह से समाप्त नहीं किया जा सकता है।
सभी मॉक और स्पाई विवरण के लिए, हम एक काल्पनिक वर्ग / वस्तु का उल्लेख कर रहे हैं, जिसे 'डिस्काउंटक्लकुलर' कहा जाता है, जिसे हम मॉक / जासूसी करना चाहते हैं।
इसकी कुछ विधियाँ निम्नानुसार हैं:
गणना - किसी दिए गए उत्पाद के रियायती मूल्य की गणना करता है।
getDiscountLimit - उत्पाद के लिए ऊपरी सीमा छूट सीमा को प्राप्त करता है।
बनाना मोक्स
# 1) कोड के साथ नकली निर्माण
मॉकिटो मॉकिटो के कई अतिभारित संस्करण देता है। मोज़ेक विधि और निर्भरता के लिए नकली बनाने की अनुमति देता है।
वाक्य - विन्यास:
Mockito.mock(Class classToMock)
उदाहरण:
मान लें कि कोड में मॉक बनाने के लिए क्लास का नाम डिस्काउंटकैलकुलर है:
DiscountCalculator mockedDiscountCalculator = Mockito.mock(DiscountCalculator.class)
यह ध्यान रखना महत्वपूर्ण है कि मॉक को इंटरफ़ेस या कंक्रीट क्लास दोनों के लिए बनाया जा सकता है।
जब किसी वस्तु का मजाक उड़ाया जाता है, जब तक कि सभी विधियां डिफ़ॉल्ट रूप से वापस नहीं आ जाती हैं ।
DiscountCalculator mockDiscountCalculator = Mockito.mock(DiscountCalculator.class);
# 2) एनोटेशन के साथ नकली निर्माण
मॉकिटो लाइब्रेरी के स्थिर ock मॉक ’पद्धति का उपयोग करने के बजाय, यह ocks @Mock’ एनोटेशन का उपयोग करके मॉक बनाने का शॉर्टहैंड तरीका भी प्रदान करता है।
इस दृष्टिकोण का सबसे बड़ा लाभ यह है कि यह सरल है और घोषणा को संयोजित करने और अनिवार्य रूप से प्रारंभ करने की अनुमति देता है। यह परीक्षणों को अधिक पठनीय बनाता है और कई स्थानों पर एक ही मॉक का उपयोग किए जाने पर बार-बार मॉक के आरंभ होने से बचा जाता है।
इस दृष्टिकोण के माध्यम से मॉक आरंभीकरण सुनिश्चित करने के लिए, इसकी आवश्यकता है कि हमें परीक्षण के तहत कक्षा के लिए A MockitoAnnotations.initMocks (यह) कॉल करना चाहिए। यह जूनिट की the पहले वाली ’पद्धति का हिस्सा बनने वाला आदर्श उम्मीदवार है जो यह सुनिश्चित करता है कि प्रत्येक बार उस वर्ग से किसी परीक्षा को अंजाम दिए जाने पर मोक्स को इनिशियलाइज़ किया जाए।
वाक्य - विन्यास:
@Mock private transient DiscountCalculator mockedDiscountCalculator;
जासूस बनाना
मोक्स के समान, जासूस भी 2 तरीकों से बनाए जा सकते हैं:
# 1) कोड के साथ जासूस निर्माण
Mockito.spy एक स्थिर विधि है जिसका उपयोग वास्तविक वस्तु उदाहरण के चारों ओर object जासूस ’वस्तु / आवरण बनाने के लिए किया जाता है।
वाक्य - विन्यास:
सबसे अच्छा तापमान निगरानी सॉफ्टवेयर विंडोज़ 10
private transient ItemService itemService = new ItemServiceImpl() private transient ItemService spiedItemService = Mockito.spy(itemService);
# 2) एनोटेशन के साथ जासूसी निर्माण
Mock के समान, Spies को @Spy एनोटेशन का उपयोग करके बनाया जा सकता है।
स्पाई आरंभीकरण के लिए और साथ ही आपको यह सुनिश्चित करना होगा कि स्पाई को आरंभ करने के लिए वास्तविक परीक्षण में स्पाई का उपयोग करने से पहले MockitoAnnotations.initMocks (यह) कहा जाता है।
वाक्य - विन्यास:
@Spy private transient ItemService spiedItemService = new ItemServiceImpl();
टेस्ट के तहत क्लास / ऑब्जेक्ट के लिए मॉकडेंड डिपेंडेंसीज को कैसे इंजेक्ट करें?
जब हम अन्य नकली निर्भरता के साथ परीक्षण के तहत कक्षा का एक नकली ऑब्जेक्ट बनाना चाहते हैं, तो हम @InjectMocks एनोटेशन का उपयोग कर सकते हैं।
यह अनिवार्य रूप से क्या करता है कि @Mock (या @Spy) एनोटेशन के साथ चिह्नित सभी ऑब्जेक्ट्स को क्लास ऑब्जेक्ट में ठेकेदार या संपत्ति इंजेक्शन के रूप में इंजेक्ट किया जाता है और फिर अंतिम मॉक किए गए ऑब्जेक्ट पर इंटरैक्शन को सत्यापित किया जा सकता है।
फिर से, उल्लेख करने के लिए अनावश्यक, @InjectMocks वर्ग का एक नया उद्देश्य बनाने के खिलाफ एक आशुलिपि है और निर्भरता की नकली वस्तुओं को प्रदान करता है।
आइए इसे एक उदाहरण से समझते हैं:
मान लीजिए, एक वर्ग PriceCalculator है, जिसमें भरोसेमंद के रूप में DiscountCalculator और UserService है जो कन्स्ट्रक्टर या संपत्ति क्षेत्रों के माध्यम से इंजेक्ट किए जाते हैं।
इसलिए, मूल्य कैलकुलेटर वर्ग के लिए नकली कार्यान्वयन बनाने के लिए, हम 2 दृष्टिकोणों का उपयोग कर सकते हैं:
# 1) बनाएं PriceCalculator का नया उदाहरण और नकली निर्भरता को इंजेक्ट करें
@Mock private transient DiscountCalculator mockedDiscountCalculator; @Mock private transient UserService userService; @Mock private transient ItemService mockedItemService; private transient PriceCalculator priceCalculator; @BeforeEach public void beforeEach() { MockitoAnnotations.initMocks(this); priceCalculator = new PriceCalculator(mockedDiscountCalculator, userService, mockedItemService); }
# 2) बनाएं PriceCalculator का एक नकली उदाहरण और @InjectMocks एनोटेशन के माध्यम से निर्भरता को इंजेक्ट करें
@Mock private transient DiscountCalculator mockedDiscountCalculator; @Mock private transient UserService userService; @Mock private transient ItemService mockedItemService; @InjectMocks private transient PriceCalculator priceCalculator; @BeforeEach public void beforeEach() { MockitoAnnotations.initMocks(this);
InjectMocks एनोटेशन वास्तव में नीचे दिए गए दृष्टिकोणों में से एक का उपयोग करके नकली निर्भरता को इंजेक्ट करने की कोशिश करता है:
- कंस्ट्रक्टर बेस्ड इंजेक्शन - परीक्षण के तहत कक्षा के लिए कंस्ट्रक्टर का उपयोग करता है।
- सेटर विधियां आधारित - जब एक कंस्ट्रक्टर नहीं होता है, तो मॉकिटो संपत्ति बसने वालों का उपयोग करके इंजेक्शन लगाने की कोशिश करता है।
- क्षेत्र में स्थित - जब उपर्युक्त 2 उपलब्ध नहीं होते हैं तो यह सीधे खेतों के माध्यम से इंजेक्शन लगाने की कोशिश करता है।
सुझाव और युक्ति
# 1) एक ही विधि के अलग-अलग कॉल के लिए अलग स्टब्स स्थापित करना:
जब परीक्षण के तहत विधि के अंदर एक स्टब्ड विधि को कई बार कहा जाता है (या स्टब्ड विधि लूप में होती है और आप हर बार अलग-अलग आउटपुट लौटना चाहते हैं), तो आप हर बार अलग-अलग स्टब्ड प्रतिक्रिया को वापस करने के लिए मॉक सेट कर सकते हैं।
अजगर सेलेनियम पाठ द्वारा तत्व खोजता है
उदाहरण के लिए: मान लीजिए आप चाहते हैं आइटम सेवा लगातार 3 कॉलों के लिए एक अलग आइटम वापस करने के लिए और आपके पास आइटमों में आइटम के रूप में घोषित किए गए हैं जैसे कि आइटम 1, आइटम 2, और आइटम 3, फिर आप बस नीचे दिए गए कोड का उपयोग करके लगातार 3 इनवॉइस के लिए इन्हें वापस कर सकते हैं:
@Test public void calculatePrice_withCorrectInput_returnsValidResult() { // Arrange ItemSku item1 = new ItemSku(); ItemSku item2 = new ItemSku(); ItemSku item3 = new ItemSku(); // Setup Mocks when(mockedItemService.getItemDetails(anyInt())).thenReturn(item1, item2, item3); // Assert //TODO - add assert statements }
#दो) मॉक के माध्यम से अपवाद फेंकना: यह एक बहुत ही सामान्य परिदृश्य है जब आप किसी अपवाद को फेंकने वाले / निर्भरता का परीक्षण / सत्यापन करना चाहते हैं और परीक्षण के तहत सिस्टम के व्यवहार की जांच करते हैं। हालांकि, मॉक द्वारा एक अपवाद फेंकने के लिए, आपको तत्कालीन थ्रो का उपयोग करके स्टब सेटअप करने की आवश्यकता होगी।
@Test public void calculatePrice_withInCorrectInput_throwsException() { // Arrange ItemSku item1 = new ItemSku(); // Setup Mocks when(mockedItemService.getItemDetails(anyInt())).thenThrow(new ItemServiceException(anyString())); // Assert //TODO - add assert statements }
किसी भी तरह के मैचों के लिए (और किसी भी तरह से), आने वाले लेखों में शामिल किए जाने से भयभीत नहीं होंगे। लेकिन संक्षेप में, वे आपको बिना किसी विशिष्ट फ़ंक्शन तर्क के क्रमशः किसी भी पूर्णांक और स्ट्रिंग मूल्य प्रदान करने की सुविधा देते हैं।
कोड उदाहरण - जासूस और मोज़े
जैसा कि पहले चर्चा की गई, दोनों जासूस और मोज़े टेस्ट डबल्स के प्रकार हैं और उनके अपने उपयोग हैं।
जबकि जासूसी विरासत अनुप्रयोगों के परीक्षण के लिए उपयोगी है (और जहां नकली संभव नहीं है), अन्य सभी अच्छी तरह से लिखित परीक्षण योग्य तरीकों / कक्षाओं के लिए, मोक्स यूनिट परीक्षण की अधिकांश जरूरतों का सामना करते हैं।
एक ही उदाहरण के लिए: चलिए हम PriceCalculator के लिए Mocks का उपयोग करके एक परीक्षण लिखते हैं -> गणना विधि (विधि लागू आइटम की गणना करता है। लागू छूट से कम)
PriceCalculator वर्ग और परीक्षण गणना के तहत विधि नीचे दी गई के रूप में दिखता है:
public class PriceCalculator { public DiscountCalculator discountCalculator; public UserService userService; public ItemService itemService; public PriceCalculator(DiscountCalculator discountCalculator, UserService userService, ItemService itemService) { this.discountCalculator = discountCalculator; this.userService = userService; this.itemService = itemService; } public double calculatePrice(int itemSkuCode, int customerAccountId) { double price = 0; // get Item details ItemSku sku = itemService.getItemDetails(itemSkuCode); // get User and calculate price CustomerProfile customerProfile = userService.getUser(customerAccountId); double basePrice = sku.getPrice(); price = basePrice - (basePrice* (sku.getApplicableDiscount() + customerProfile.getExtraLoyaltyDiscountPercentage())/100); return price; } }
अब इस विधि के लिए एक सकारात्मक परीक्षण लिखें।
हम नीचे बताए अनुसार उपयोगकर्ता सेवा और आइटम सेवा को स्टब करने जा रहे हैं:
- उपयोगकर्ता सेवा हमेशा 2 के लिए सेट की गई वफादारी के साथ ग्राहकप्रोफाइल को लौटाएगी।
- आइटम सेवा हमेशा 100 के आधार के साथ एक आइटम लौटाएगा और 5 का लागू होगा।
- उपरोक्त मूल्यों के साथ, परीक्षण के तहत विधि द्वारा लौटाया जाने वाला अपेक्षितप्राइस 93 डॉलर हो जाता है।
यहाँ परीक्षण के लिए कोड है:
@Test public void calculatePrice_withCorrectInput_returnsExpectedPrice() { // Arrange ItemSku item1 = new ItemSku(); item1.setApplicableDiscount(5.00); item1.setPrice(100.00); CustomerProfile customerProfile = new CustomerProfile(); customerProfile.setExtraLoyaltyDiscountPercentage(2.00); double expectedPrice = 93.00; // Setting up stubbed responses using mocks when(mockedItemService.getItemDetails(anyInt())).thenReturn(item1); when(mockedUserService.getUser(anyInt())).thenReturn(customerProfile); // Act double actualPrice = priceCalculator.calculatePrice(123,5432); // Assert assertEquals(expectedPrice, actualPrice); }
जैसा कि आप देख सकते हैं, उपरोक्त परीक्षण में - हम इस बात पर जोर दे रहे हैं कि विधि द्वारा लौटाए गए वास्तविकप्राइस की उम्मीद के बराबर यानी 93.00 है।
अब, स्पाई का उपयोग करके एक परीक्षण लिखें।
हम ItemService की जासूसी करेंगे और ItemService क्रियान्वयन को इस तरह से कोडित करेंगे कि यह हमेशा बेसप्रीस 200 के साथ एक आइटम देता है और 23% के स्क्यूकोड के साथ बुलाया जाता है जब भी 10.00% (मॉक सेटअप का बाकी हिस्सा समान रहता है)।
@InjectMocks private PriceCalculator priceCalculator; @Mock private DiscountCalculator mockedDiscountCalculator; @Mock private UserService mockedUserService; @Spy private ItemService mockedItemService = new ItemServiceImpl(); @BeforeEach public void beforeEach() { MockitoAnnotations.initMocks(this); } @Test public void calculatePrice_withCorrectInputRealMethodCall_returnsExpectedPrice() { // Arrange CustomerProfile customerProfile = new CustomerProfile(); customerProfile.setExtraLoyaltyDiscountPercentage(2.00); double expectedPrice = 176.00; // Setting up stubbed responses using mocks when(mockedUserService.getUser(anyInt())).thenReturn(customerProfile); // Act double actualPrice = priceCalculator.calculatePrice(2367,5432); // Assert assertEquals(expectedPrice, actualPrice);
अब, आइए देखें उदाहरण आइटम आइटम उपलब्ध होने के कारण आइटम सेवा द्वारा फेंका जा रहा एक अपवाद था। 0. हम एक अपवाद फेंकने के लिए नकली सेट करेंगे।
@InjectMocks private PriceCalculator priceCalculator; @Mock private DiscountCalculator mockedDiscountCalculator; @Mock private UserService mockedUserService; @Mock private ItemService mockedItemService = new ItemServiceImpl(); @BeforeEach public void beforeEach() { MockitoAnnotations.initMocks(this); } @Test public void calculatePrice_whenItemNotAvailable_throwsException() { // Arrange CustomerProfile customerProfile = new CustomerProfile(); customerProfile.setExtraLoyaltyDiscountPercentage(2.00); double expectedPrice = 176.00; // Setting up stubbed responses using mocks when(mockedUserService.getUser(anyInt())).thenReturn(customerProfile); when(mockedItemService.getItemDetails(anyInt())).thenThrow(new ItemServiceException(anyString())); // Act & Assert assertThrows(ItemServiceException.class, () -> priceCalculator.calculatePrice(123, 234)); }
उपरोक्त उदाहरणों के साथ, मैंने Mocks & Spies की अवधारणा को समझाने की कोशिश की है और उन्हें प्रभावी और उपयोगी यूनिट टेस्ट बनाने के लिए कैसे जोड़ा जा सकता है।
इन तकनीकों के कई संयोजन हो सकते हैं जो परीक्षण के एक सूट को प्राप्त करते हैं जो परीक्षण के तहत विधि के कवरेज को बढ़ाते हैं, जिससे कोड में आत्मविश्वास का एक बड़ा स्तर सुनिश्चित होता है और कोड को प्रतिगमन कीड़ों के प्रति अधिक प्रतिरोधी बनाता है।
सोर्स कोड
इंटरफेस
बट्टा लगानेवाला
public interface DiscountCalculator { double calculateDiscount(ItemSku itemSku, double markedPrice); void calculateProfitability(ItemSku itemSku, CustomerProfile customerProfile); }
आइटम सेवा
public interface ItemService { ItemSku getItemDetails(int skuCode) throws ItemServiceException; }
उपयोगकर्ता सेवा
public interface UserService { void addUser(CustomerProfile customerProfile); void deleteUser(CustomerProfile customerProfile); CustomerProfile getUser(int customerAccountId); }
इंटरफ़ेस कार्यान्वयन
डिस्काउंटकल्कुलेटरइम्प्ल
public class DiscountCalculatorImpl implements DiscountCalculator { @Override public double calculateDiscount(ItemSku itemSku, double markedPrice) { return 0; } @Override public void calculateProfitability(ItemSku itemSku, CustomerProfile customerProfile) { } }
आइटम सेवा सेवा
public class DiscountCalculatorImpl implements DiscountCalculator { @Override public double calculateDiscount(ItemSku itemSku, double markedPrice) { return 0; } @Override public void calculateProfitability(ItemSku itemSku, CustomerProfile customerProfile) { } }
मॉडल
ग्राहक रुपरेखा
public class CustomerProfile { private String customerName; private String loyaltyTier; private String customerAddress; private String accountId; private double extraLoyaltyDiscountPercentage; public double getExtraLoyaltyDiscountPercentage() { return extraLoyaltyDiscountPercentage; } public void setExtraLoyaltyDiscountPercentage(double extraLoyaltyDiscountPercentage) { this.extraLoyaltyDiscountPercentage = extraLoyaltyDiscountPercentage; } public String getAccountId() { return accountId; } public void setAccountId(String accountId) { this.accountId = accountId; } public String getCustomerName() { return customerName; } public void setCustomerName(String customerName) { this.customerName = customerName; } public String getLoyaltyTier() { return loyaltyTier; } public void setLoyaltyTier(String loyaltyTier) { this.loyaltyTier = loyaltyTier; } public String getCustomerAddress() { return customerAddress; } public void setCustomerAddress(String customerAddress) { this.customerAddress = customerAddress; } }
आइटमस्कू
public class ItemSku { private int skuCode; private double price; private double maxDiscount; private double margin; private int totalQuantity; private double applicableDiscount; public double getApplicableDiscount() { return applicableDiscount; } public void setApplicableDiscount(double applicableDiscount) { this.applicableDiscount = applicableDiscount; } public int getTotalQuantity() { return totalQuantity; } public void setTotalQuantity(int totalQuantity) { this.totalQuantity = totalQuantity; } public int getSkuCode() { return skuCode; } public void setSkuCode(int skuCode) { this.skuCode = skuCode; } public double getPrice() { return price; } public void setPrice(double price) { this.price = price; } public double getMaxDiscount() { return maxDiscount; } public void setMaxDiscount(double maxDiscount) { this.maxDiscount = maxDiscount; } public double getMargin() { return margin; } public void setMargin(double margin) { this.margin = margin; } }
टेस्ट के तहत कक्षा - PriceCalculator
public class PriceCalculator { public DiscountCalculator discountCalculator; public UserService userService; public ItemService itemService; public PriceCalculator(DiscountCalculator discountCalculator, UserService userService, ItemService itemService){ this.discountCalculator = discountCalculator; this.userService = userService; this.itemService = itemService; } public double calculatePrice(int itemSkuCode, int customerAccountId) { double price = 0; // get Item details ItemSku sku = itemService.getItemDetails(itemSkuCode); // get User and calculate price CustomerProfile customerProfile = userService.getUser(customerAccountId); double basePrice = sku.getPrice(); price = basePrice - (basePrice* (sku.getApplicableDiscount() + customerProfile.getExtraLoyaltyDiscountPercentage())/100); return price; } }
यूनिट टेस्ट - PriceCalculatorUnitTests
public class PriceCalculatorUnitTests { @InjectMocks private PriceCalculator priceCalculator; @Mock private DiscountCalculator mockedDiscountCalculator; @Mock private UserService mockedUserService; @Mock private ItemService mockedItemService; @BeforeEach public void beforeEach() { MockitoAnnotations.initMocks(this); } @Test public void calculatePrice_withCorrectInput_returnsExpectedPrice() { // Arrange ItemSku item1 = new ItemSku(); item1.setApplicableDiscount(5.00); item1.setPrice(100.00); CustomerProfile customerProfile = new CustomerProfile(); customerProfile.setExtraLoyaltyDiscountPercentage(2.00); double expectedPrice = 93.00; // Setting up stubbed responses using mocks when(mockedItemService.getItemDetails(anyInt())).thenReturn(item1); when(mockedUserService.getUser(anyInt())).thenReturn(customerProfile); // Act double actualPrice = priceCalculator.calculatePrice(123,5432); // Assert assertEquals(expectedPrice, actualPrice); } @Test @Disabled // to enable this change the ItemService MOCK to SPY public void calculatePrice_withCorrectInputRealMethodCall_returnsExpectedPrice() { // Arrange CustomerProfile customerProfile = new CustomerProfile(); customerProfile.setExtraLoyaltyDiscountPercentage(2.00); double expectedPrice = 176.00; // Setting up stubbed responses using mocks when(mockedUserService.getUser(anyInt())).thenReturn(customerProfile); // Act double actualPrice = priceCalculator.calculatePrice(2367,5432); // Assert assertEquals(expectedPrice, actualPrice); } @Test public void calculatePrice_whenItemNotAvailable_throwsException() { // Arrange CustomerProfile customerProfile = new CustomerProfile(); customerProfile.setExtraLoyaltyDiscountPercentage(2.00); double expectedPrice = 176.00; // Setting up stubbed responses using mocks when(mockedUserService.getUser(anyInt())).thenReturn(customerProfile); when(mockedItemService.getItemDetails(anyInt())).thenThrow(new ItemServiceException(anyString())); // Act & Assert assertThrows(ItemServiceException.class, () -> priceCalculator.calculatePrice(123, 234)); } }
मॉकिटो द्वारा प्रदान किए गए विभिन्न प्रकार के मिलान हमारे आगामी ट्यूटोरियल में बताए गए हैं।
PREV ट्यूटोरियल | अगले ट्यूटोरियल
अनुशंसित पाठ
- मॉकिटो द्वारा प्रदान किए गए विभिन्न प्रकार के मिलान
- मॉकिटो ट्यूटोरियल: यूनिट टेस्टिंग में मॉकिंग के लिए मॉकिटो फ्रेमवर्क
- ग्रहण के लिए एपोच स्टूडियो का उपयोग करके एपोच परीक्षण का निर्माण करना
- उदाहरणों के साथ पायथन डेटटाइम ट्यूटोरियल
- उदाहरणों के साथ यूनिक्स में कमान काटें
- यूनिक्स कैट कमांड सिंटैक्स, उदाहरण के साथ विकल्प
- उदाहरणों के साथ MongoDB में कर्सर का उपयोग
- उदाहरणों के साथ यूनिक्स में Ls कमांड