Spring Boot परीक्षण स्लाइस: @WebMvcTest और @DataJpaTest
नियंत्रकों का अलगाव में परीक्षण करने के लिए @WebMvcTest और रिपॉज़िटरी परत के परीक्षण के लिए @DataJpaTest उपयोग कीजिए
Spring Boot परीक्षण स्लाइस: @WebMvcTest और @DataJpaTest, CoddyKit पर Java Academy का एक निःशुल्क पाठ है। यह 4 में से 3वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह Java Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। Java Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
टेस्ट स्लाइस क्या होते हैं
टेस्ट स्लाइस किसी विशिष्ट परत के लिए Spring संदर्भ का केवल संबंधित भाग लोड करते हैं। ये @SpringBootTest से तेज़ होते हैं, जो सब कुछ लोड करता है, और परीक्षणाधीन परत को अलग रखते हैं।
@WebMvcTest: केवल नियंत्रक परत
@WebMvcTest(UserController.class) केवल वेब परत लोड करता है: नियंत्रक, फ़िल्टर, सुरक्षा कॉन्फ़िगरेशन और Jackson। सेवाओं और रिपॉज़िटरी को @MockBean से मॉक करना होगा।
@WebMvcTest(UserController.class)
class UserControllerTest {
@Autowired MockMvc mockMvc;
@MockBean UserService userService;
@Test
void get_user_returns_200() throws Exception {
given(userService.findById(1L)).willReturn(new UserDto(1L, "Alice"));
mockMvc.perform(get("/api/users/1"))
.andExpect(status().isOk())
.andExpect(jsonPath("$.name").value("Alice"));
}
}MockMvc अनुरोध बनाना
MockMvcRequestBuilders से अनुरोध बनाएँ। POST/PUT परीक्षणों के लिए हेडर, कंटेंट प्रकार और अनुरोध बॉडी सेट करें।
mockMvc.perform(post("/api/users")
.contentType(MediaType.APPLICATION_JSON)
.content("""{"name":"Bob","email":"bob@example.com"}"""))
.andExpect(status().isCreated())
.andExpect(header().exists("Location"));@WebMvcTest में सत्यापन का परीक्षण
अमान्य अनुरोध बॉडी MethodArgumentNotValidException उत्पन्न करती हैं। 400 स्थिति और त्रुटि प्रतिक्रिया बॉडी की जाँच करें।
mockMvc.perform(post("/api/users")
.contentType(MediaType.APPLICATION_JSON)
.content("""{"name":"","email":"bad"}"""))
.andExpect(status().isBadRequest())
.andExpect(jsonPath("$.errors.name").exists());@DataJpaTest: केवल रिपॉज़िटरी परत
@DataJpaTest JPA रिपॉज़िटरी, एम्बेडेड H2 डेटाबेस, Hibernate और एक TestEntityManager लोड करता है। अन्य बीन्स, जैसे सेवाएँ और वेब परत, लोड नहीं किए जाते।
@DataJpaTest
class UserRepositoryTest {
@Autowired UserRepository repo;
@Autowired TestEntityManager em;
@Test
void find_by_email() {
em.persist(new User("Alice", "alice@example.com"));
em.flush();
Optional<User> found = repo.findByEmail("alice@example.com");
assertTrue(found.isPresent());
}
}TestEntityManager
TestEntityManager, EntityManager को सुविधाजनक विधियों के साथ लपेटता है: persist(), flush(), find(), persistAndFlush()।
User saved = em.persistAndFlush(new User("Bob", "bob@example.com"));
assertNotNull(saved.getId());
em.clear(); // detach all to force a real DB read
User fromDb = repo.findById(saved.getId()).orElseThrow();
assertEquals("Bob", fromDb.getName());@DataJpaTest रोलबैक
डिफ़ॉल्ट रूप से प्रत्येक परीक्षण एक ऐसे लेन-देन में चलता है, जिसे परीक्षण के बाद रोलबैक कर दिया जाता है। परीक्षणों के बीच डेटा बना नहीं रहता — इससे मैन्युअल सफ़ाई के बिना परीक्षणों का पृथक्करण सुनिश्चित होता है।
@DataJpaTest // each @Test is rolled back automatically
class OrderRepositoryTest {
@Test @Transactional
void count_orders_is_zero_by_default() {
assertEquals(0, orderRepo.count());
}
}@DataJpaTest में H2 को वास्तविक डेटाबेस से बदलना
H2 के बजाय application.properties में कॉन्फ़िगर किए गए वास्तविक डेटाबेस के विरुद्ध @DataJpaTest चलाने के लिए @AutoConfigureTestDatabase(replace = Replace.NONE) का उपयोग करें।
@DataJpaTest
@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)
class ProductRepositoryTest {
// Uses the configured PostgreSQL, not H2
}@JsonTest: केवल JSON सीरियलाइज़ेशन
@JsonTest Jackson कॉन्फ़िगरेशन लोड करता है। ऑब्जेक्ट अपेक्षित रूप से सीरियलाइज़ और डीसीरियलाइज़ होते हैं या नहीं, यह जाँचने के लिए JacksonTester का उपयोग करें।
@JsonTest
class UserDtoJsonTest {
@Autowired JacksonTester<UserDto> json;
@Test
void serializes_correctly() throws Exception {
UserDto dto = new UserDto(1L, "Alice", "alice@example.com");
assertThat(json.write(dto)).hasJsonPathStringValue("$.email");
}
}@RestClientTest: REST क्लाइंट परत
@RestClientTest, RestTemplate या WebClient-आधारित HTTP क्लाइंट का परीक्षण करता है। यह HTTP प्रतिक्रियाओं को मॉक करने के लिए MockRestServiceServer कॉन्फ़िगर करता है।
@RestClientTest(WeatherClient.class)
class WeatherClientTest {
@Autowired WeatherClient client;
@Autowired MockRestServiceServer server;
@Test
void fetches_weather() {
server.expect(requestTo("/api/weather")).andRespond(withSuccess("""{"temp":22}""", APPLICATION_JSON));
Weather w = client.getWeather("Istanbul");
assertEquals(22, w.getTemp());
}
}@Import के साथ स्लाइस मिलाना
स्लाइस डिज़ाइन के अनुसार कई बीन्स को बाहर रखते हैं। स्लाइस के लिए आवश्यक विशिष्ट कॉन्फ़िगरेशन क्लास जोड़ने के लिए @Import(SomeConfig.class) का उपयोग करें।
@WebMvcTest(UserController.class)
@Import(SecurityConfig.class) // load security for auth tests
class SecuredControllerTest { ... }त्वरित जाँच
@DataJpaTest डिफ़ॉल्ट रूप से किस डेटाबेस का उपयोग करता है?
पुनरावलोकन
@WebMvcTest, MockMvc के साथ नियंत्रक परत का परीक्षण करता है; सेवाओं को @MockBean से मॉक करें। @DataJpaTest, TestEntityManager और स्वचालित रोलबैक के साथ रिपॉज़िटरी का परीक्षण करता है। वास्तविक DB के लिए Replace.NONE का उपयोग करें। सीरियलाइज़ेशन के लिए @JsonTest और HTTP क्लाइंट के लिए @RestClientTest का उपयोग करें।
एआई शिक्षक के साथ Java सीखें — निःशुल्क
अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।
- पाठ्यक्रम
- 104
- पाठ
- 374
अक्सर पूछे जाने वाले प्रश्न
क्या “Spring Boot परीक्षण स्लाइस: @WebMvcTest और @DataJpaTest” पाठ निःशुल्क है?
हाँ—“Spring Boot परीक्षण स्लाइस: @WebMvcTest और @DataJpaTest” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और Java Academy पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। Java Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
“Spring Boot परीक्षण स्लाइस: @WebMvcTest और @DataJpaTest” में मैं क्या सीखूँगा?
नियंत्रकों का अलगाव में परीक्षण करने के लिए @WebMvcTest और रिपॉज़िटरी परत के परीक्षण के लिए @DataJpaTest उपयोग कीजिए आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ Java Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।
क्या Java Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?
पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर Java Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 3वाँ पाठ है।
“Spring Boot परीक्षण स्लाइस: @WebMvcTest और @DataJpaTest” पाठ पूरा करने में कितना समय लगता है?
CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।
क्या मैं इस Java Academy पाठ में कोड लिख और चला सकता हूँ?
हाँ। हर Java Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।
इस पाठ्यक्रम के सभी पाठ
- @CsvSource और @MethodSource से पैरामीटरयुक्त परीक्षण
- Mockito उन्नत: आर्ग्युमेंट कैप्चरर और स्पाई
- Spring Boot परीक्षण स्लाइस: @WebMvcTest और @DataJpaTest
- Testcontainers: वास्तविक डेटाबेस एकीकरण परीक्षण