Spring Boot के साथ GraphQL APIs · पाठ

GraphQL रिज़ॉल्वर का यूनिट परीक्षण

Spring Boot में अपने GraphQL रिज़ॉल्वर और डेटा प्राप्ति तर्क के लिए प्रभावी यूनिट परीक्षण लिखें।

पाठ 1, कुल 4 में से11 चरण

GraphQL रिज़ॉल्वर का यूनिट परीक्षण, CoddyKit पर Spring Boot के साथ GraphQL APIs का एक निःशुल्क पाठ है। यह 4 में से 1वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह Spring Boot के साथ GraphQL APIs सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। Spring Boot के साथ GraphQL APIs पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

रिज़ॉल्वर का यूनिट टेस्ट क्यों करें?

अपने GraphQL API की विश्वसनीयता सुनिश्चित करने के लिए यूनिट टेस्टिंग आवश्यक है। जब हम रिज़ॉल्वर का यूनिट टेस्ट करते हैं, तो हमारा ध्यान अलग-अलग घटकों को स्वतंत्र रूप से जाँचने पर होता है।

  • अलगाव: हम चालू सर्वर या डेटाबेस की आवश्यकता के बिना रिज़ॉल्वर की जाँच करते हैं।
  • शुद्धता: रिज़ॉल्वर के तर्क, आर्ग्युमेंट सँभालने और डेटा रूपांतरण की पुष्टि करते हैं।
  • गति: यूनिट टेस्ट बहुत तेज़ी से चलते हैं और विकास के दौरान तुरंत प्रतिक्रिया देते हैं।

यह पाठ आपको Spring Boot GraphQL रिज़ॉल्वर के प्रभावी यूनिट टेस्ट लिखने का तरीका बताएगा।

Spring Boot रिज़ॉल्वर का अवलोकन

टेस्टिंग से पहले, आइए संक्षेप में याद करें कि Spring Boot में रिज़ॉल्वर किस तरह संरचित होते हैं। वे आम तौर पर Spring के @Controller घटक होते हैं, जिनकी विधियों पर @QueryMapping या @MutationMapping जैसे GraphQL ऑपरेशन के लिए एनोटेशन लगाए जाते हैं।

ये विधियाँ अक्सर डेटा प्राप्त करने या उसमें बदलाव करने के लिए Spring के अन्य @Service घटकों पर निर्भर करती हैं। ऐसे मामलों में टेस्टिंग के लिए मॉक बनाना उपयोगी होता है।

टेस्ट परिवेश सेट अप करना

Spring Boot में यूनिट टेस्टिंग के लिए आप मुख्य रूप से JUnit 5 और Mockito का उपयोग करेंगे। ये आम तौर पर spring-boot-starter-test के साथ डिफ़ॉल्ट रूप से शामिल होते हैं।

  • JUnit 5: अपने टेस्ट लिखने और चलाने का टेस्टिंग फ्रेमवर्क।
  • Mockito: निर्भरताओं के लिए मॉक ऑब्जेक्ट बनाने वाला मॉकिंग फ्रेमवर्क, जिससे आप टेस्ट किए जा रहे रिज़ॉल्वर को अलग रख सकते हैं।

सुनिश्चित करें कि आपके pom.xml या build.gradle में spring-boot-starter-test निर्भरता शामिल हो।

मॉक की सहायता से रिज़ॉल्वर को अलग रखना

रिज़ॉल्वर अक्सर सेवाओं, रिपॉज़िटरी या अन्य घटकों के साथ काम करते हैं। किसी रिज़ॉल्वर का यूनिट टेस्ट करने के लिए हमें उसे इन निर्भरताओं से अलग रखना होता है।

Mockito हमें ऐसे 'मॉक' ऑब्जेक्ट बनाने में मदद करता है जो वास्तविक निर्भरताओं के व्यवहार की नकल करते हैं। इससे हम नियंत्रित कर सकते हैं कि निर्भरताएँ क्या लौटाएँ और यह सत्यापित कर सकते हैं कि उन्हें किस तरह कॉल किया गया, बिना उनके वास्तविक तर्क को चलाए।

  • @Mock: किसी क्लास या इंटरफ़ेस का मॉक इंस्टेंस बनाता है।
  • @InjectMocks: बनाए गए मॉक को टेस्ट किए जा रहे ऑब्जेक्ट में इंजेक्ट करता है।
  • @ExtendWith(MockitoExtension.class): Mockito को JUnit 5 के साथ एकीकृत करता है।

एक सरल रिज़ॉल्वर का टेस्ट करना

आइए ऐसे बुनियादी रिज़ॉल्वर से शुरू करें जिसकी कोई बाहरी निर्भरता नहीं है। हम उसका इंस्टेंस सीधे बना सकते हैं और उसकी विधि को कॉल कर सकते हैं।

यह उदाहरण JUnit 5 के अभिकथनों का उपयोग करके एक सरल रिज़ॉल्वर और उसके संबंधित यूनिट टेस्ट को दिखाता है।

package com.example.app;

import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals;

// Imagine MyResolver.java exists with a greeting() method
// @Controller
// public class MyResolver {
//   @QueryMapping
//   public String greeting() {
//     return "Hello GraphQL!";
//   }
// }

class MyResolverTest {
  @Test
  void greetingReturnsCorrectMessage() {
    // 1. Arrange: Create an instance of the resolver
    MyResolver resolver = new MyResolver();

    // 2. Act: Call the method under test
    String result = resolver.greeting();

    // 3. Assert: Verify the output
    assertEquals("Hello GraphQL!", result);
  }
}

मॉक की गई सेवाओं के साथ टेस्ट करना

अधिकांश रिज़ॉल्वर व्यावसायिक तर्क पूरा करने के लिए सेवाओं पर निर्भर करते हैं। GreetingService का उपयोग करने वाले रिज़ॉल्वर का टेस्ट इस तरह किया जा सकता है।

हम सेवा के लिए @Mock और रिज़ॉल्वर के लिए @InjectMocks का उपयोग करते हैं। इसके बाद, when().thenReturn() मॉक को बताता है कि उसकी विधि कॉल किए जाने पर क्या लौटाना है।

package com.example.app;

import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.mockito.Mockito.when;

// Imagine GreetingResolver.java and GreetingService.java exist
// (see previous scenes for context)

@ExtendWith(MockitoExtension.class)
class GreetingResolverTest {
  @Mock
  private GreetingService greetingService;

  @InjectMocks
  private GreetingResolver greetingResolver;

  @Test
  void personalizedGreetingReturnsExpected() {
    // Arrange: Define mock behavior
    when(greetingService.generateGreeting("Alice"))
      .thenReturn("Hello, Alice!");

    // Act: Call resolver method
    String result = greetingResolver.personalizedGreeting("Alice");

    // Assert: Verify resolver's output
    assertEquals("Hello, Alice!", result);
  }
}

इनपुट आर्ग्युमेंट की पुष्टि करना

यह सुनिश्चित करना महत्वपूर्ण है कि आपका रिज़ॉल्वर आर्ग्युमेंट को अपनी अंतर्निहित सेवाओं तक सही ढंग से पहुँचाता है। Mockito की verify() विधि इसमें सहायता करती है।

Mockito.verify(mockObject).method(expectedArgs) यह पुष्टि करता है कि टेस्ट चलने के दौरान निर्दिष्ट विधि को बिल्कुल उन्हीं आर्ग्युमेंट के साथ कॉल किया गया था।

package com.example.app;

import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;

@ExtendWith(MockitoExtension.class)
class GreetingResolverVerifyTest {
  @Mock
  private GreetingService greetingService;

  @InjectMocks
  private GreetingResolver greetingResolver;

  @Test
  void serviceCalledWithCorrectArgument() {
    // Arrange
    when(greetingService.generateGreeting("Bob"))
      .thenReturn("Hi Bob!");

    // Act
    greetingResolver.personalizedGreeting("Bob");

    // Assert: Verify service method was called with "Bob"
    verify(greetingService).generateGreeting("Bob");
  }
}

अपेक्षित रिटर्न वैल्यू का टेस्ट करना

रिज़ॉल्वर द्वारा डेटा संसाधित करने के बाद उसे सही आउटपुट लौटाना चाहिए। इन रिटर्न वैल्यू की पुष्टि करने के लिए JUnit के अभिकथनों का उपयोग किया जाता है।

  • assertEquals(expected, actual): जाँचता है कि दो वैल्यू समान हैं या नहीं।
  • assertNotNull(object): जाँचता है कि कोई ऑब्जेक्ट null नहीं है।
  • assertTrue(condition): जाँचता है कि कोई शर्त सत्य है।

रिज़ॉल्वर विधि की अंतिम स्थिति या रिटर्न वैल्यू का हमेशा अभिकथन करें।

package com.example.app;

import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.mockito.Mockito.when;

@ExtendWith(MockitoExtension.class)
class GreetingResolverAssertTest {
  @Mock
  private GreetingService greetingService;

  @InjectMocks
  private GreetingResolver greetingResolver;

  @Test
  void personalizedGreetingReturnsExpectedValue() {
    String name = "Charlie";
    String expectedGreeting = "Hello, Charlie!";

    // Arrange
    when(greetingService.generateGreeting(name))
      .thenReturn(expectedGreeting);

    // Act
    String actualGreeting = 
      greetingResolver.personalizedGreeting(name);

    // Assert
    assertEquals(expectedGreeting, actualGreeting);
  }
}

त्रुटि स्थितियों का टेस्ट करना

मजबूत रिज़ॉल्वर को त्रुटियों को उचित ढंग से सँभालना चाहिए। यूनिट टेस्ट यह सत्यापित कर सकते हैं कि आपके रिज़ॉल्वर अपेक्षित अपवाद उत्पन्न करते हैं या उन्हें उचित रूप से सँभालते हैं।

यह पुष्टि करने के लिए JUnit के assertThrows का उपयोग करें कि कुछ शर्तें पूरी होने पर, जैसे किसी सेवा के विफल होने पर, किसी विशिष्ट प्रकार का अपवाद उत्पन्न होता है।

package com.example.app;

import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.mockito.Mockito.when;

@ExtendWith(MockitoExtension.class)
class ErrorHandlingResolverTest {
  @Mock
  private GreetingService greetingService;

  @InjectMocks
  private GreetingResolver greetingResolver;

  @Test
  void personalizedGreetingThrowsExceptionOnError() {
    String name = "ErrorUser";

    // Arrange: Mock service to throw an exception
    when(greetingService.generateGreeting(name))
      .thenThrow(new RuntimeException("Service failed"));

    // Act & Assert: Verify that the resolver throws
    assertThrows(RuntimeException.class, () -> {
      greetingResolver.personalizedGreeting(name);
    });
  }
}

त्वरित जाँच: यूनिट टेस्ट की अवधारणाएँ

जब आप ऐसे Spring Boot GraphQL रिज़ॉल्वर का यूनिट टेस्ट करते हैं जो UserService पर निर्भर है, तो अपनी टेस्ट क्लास में UserService इंस्टेंस पर Mockito के @Mock एनोटेशन का उपयोग करने का मुख्य उद्देश्य क्या है?

पुनरावृत्ति और आगे क्या

बधाई हो! आपने Spring Boot में अपने GraphQL रिज़ॉल्वर की यूनिट टेस्टिंग की मूल बातें सीख ली हैं।

  • हमने यूनिट टेस्ट के लिए अलगाव का महत्व समझा।
  • हमने सेवा निर्भरताओं के मॉक बनाने के लिए Mockito का उपयोग किया।
  • हमने रिज़ॉल्वर के तर्क, आर्ग्युमेंट पास करने और रिटर्न वैल्यू की पुष्टि करने वाले टेस्ट लिखे।
  • हमने त्रुटि स्थितियों की टेस्टिंग भी देखी।

इन तकनीकों को लागू करके आप सुनिश्चित कर सकते हैं कि आपके GraphQL रिज़ॉल्वर मजबूत हैं और अपेक्षा के अनुसार व्यवहार करते हैं। इसके बाद, आप अपने पूरे GraphQL API की शुरू से अंत तक पुष्टि करने के लिए एकीकरण टेस्टिंग का अध्ययन कर सकते हैं।

शुरुआत निःशुल्क

एआई शिक्षक के साथ Spring Boot के साथ GraphQL APIs सीखें — निःशुल्क

अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।

पाठ्यक्रम
12
पाठ
48

अक्सर पूछे जाने वाले प्रश्न

क्या “GraphQL रिज़ॉल्वर का यूनिट परीक्षण” पाठ निःशुल्क है?

हाँ—“GraphQL रिज़ॉल्वर का यूनिट परीक्षण” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और Spring Boot के साथ GraphQL APIs पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। Spring Boot के साथ GraphQL APIs पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

“GraphQL रिज़ॉल्वर का यूनिट परीक्षण” में मैं क्या सीखूँगा?

Spring Boot में अपने GraphQL रिज़ॉल्वर और डेटा प्राप्ति तर्क के लिए प्रभावी यूनिट परीक्षण लिखें। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ Spring Boot के साथ GraphQL APIs का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।

क्या Spring Boot के साथ GraphQL APIs शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?

पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर Spring Boot के साथ GraphQL APIs शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 1वाँ पाठ है।

“GraphQL रिज़ॉल्वर का यूनिट परीक्षण” पाठ पूरा करने में कितना समय लगता है?

CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।

क्या मैं इस Spring Boot के साथ GraphQL APIs पाठ में कोड लिख और चला सकता हूँ?

हाँ। हर Spring Boot के साथ GraphQL APIs पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।

इस पाठ्यक्रम के सभी पाठ

  1. GraphQL रिज़ॉल्वर का यूनिट परीक्षण
  2. GraphQL एपीआई का एकीकरण परीक्षण
  3. Spring Boot GraphQL का परिनियोजन
  4. GraphQL API के लिए सतत एकीकरण
← Spring Boot के साथ GraphQL APIs पर वापस जाएँ