আমি স্প্রিং বুটে নতুন এবং স্প্রিংবুটে টেস্টিং কীভাবে কাজ করে তা বোঝার চেষ্টা করছি। নিম্নলিখিত দুটি কোড স্নিপেটের মধ্যে পার্থক্য কী তা সম্পর্কে আমি কিছুটা বিভ্রান্ত হয়ে পড়েছি:
কোড স্নিপেট 1:
@RunWith(SpringRunner.class)
@WebMvcTest(HelloController.class)
public class HelloControllerApplicationTest {
@Autowired
private MockMvc mvc;
@Test
public void getHello() throws Exception {
mvc.perform(MockMvcRequestBuilders.get("/").accept(MediaType.APPLICATION_JSON))
.andExpect(status().isOk())
.andExpect(content().string(equalTo("Greetings from Spring Boot!")));
}
}
এই পরীক্ষাটি @WebMvcTest
টীকাগুলি ব্যবহার করে যা আমি বিশ্বাস করি বৈশিষ্ট্য স্লাইস পরীক্ষার জন্য এবং কেবলমাত্র একটি ওয়েব অ্যাপ্লিকেশনটির এমভিসি স্তর পরীক্ষা করে।
কোড স্নিপেট 2:
@RunWith(SpringRunner.class)
@SpringBootTest
@AutoConfigureMockMvc
public class HelloControllerTest {
@Autowired
private MockMvc mvc;
@Test
public void getHello() throws Exception {
mvc.perform(MockMvcRequestBuilders.get("/").accept(MediaType.APPLICATION_JSON))
.andExpect(status().isOk())
.andExpect(content().string(equalTo("Greetings from Spring Boot!")));
}
}
এই পরীক্ষাটি @SpringBootTest
টিকা এবং এ ব্যবহার করে MockMvc
। তাহলে কোড স্নিপেট 1 থেকে এটি কীভাবে আলাদা? এটি আলাদাভাবে কী করে?
সম্পাদনা করুন: কোড স্নিপেট 3 যুক্ত করা (এটি বসন্তের ডকুমেন্টেশনে ইন্টিগ্রেশন পরীক্ষার উদাহরণ হিসাবে পাওয়া গেছে)
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class HelloControllerIT {
@LocalServerPort private int port;
private URL base;
@Autowired private TestRestTemplate template;
@Before public void setUp() throws Exception {
this.base = new URL("http://localhost:" + port + "/");
}
@Test public void getHello() throws Exception {
ResponseEntity < String > response = template.getForEntity(base.toString(), String.class);
assertThat(response.getBody(), equalTo("Greetings from Spring Boot!"));
}
}