0


【Springboot】单元测试Junit5应用

JUnit 5是一个功能强大的测试框架,常用于编写和执行这些单元测试。以下是一些JUnit 5中的常用注解、断言、前置条件、嵌套测试和参数化测试的例子:

1.环境启动

@SpringBootTest 注解:

classes = SmartApplication.class:这个属性指定了一个或多个Spring Boot应用程序的启动类(入口点)。在测试中使用启动类可以让Spring Boot应用程序的上下文被加载,以便进行测试。

webEnvironment属性:

  • NONE: 不启动任何Web相关的环境,通常用于不需要Web环境的测试。
  • RANDOM_PORT: 随机分配一个端口来启动Web环境。
  • ANY: 使用第一个可用端口来启动Web环境。
  • MOCK: 使用MockMvc来模拟Web环境,而不用启动真实的Web服务器。
  • DEFINED_PORT: 使用在@LocalServerPort或@Value注解中定义的端口来启动Web环境。使用配置文件中定义好的端口
@SpringBootTest(classes =SmartApplication.class, webEnvironment =SpringBootTest.WebEnvironment.DEFINED_PORT)classJunitApplicationTests{@AutowiredTestService testService;@TestvoidcontextLoads(){System.err.println("测试启动");System.out.println(testService.test());}}

2. 常用注解

  • @Test:用于标记一个方法作为测试方法。
  • @BeforeEach:在每个测试方法之前执行一次。
  • @AfterEach:在每个测试方法之后执行一次。
  • @BeforeAll:在所有测试方法之前执行一次。
  • @AfterAll:在所有测试方法之后执行一次。
importorg.junit.jupiter.api.BeforeEach;importorg.junit.jupiter.api.AfterEach;importorg.junit.jupiter.api.BeforeAll;importorg.junit.jupiter.api.AfterAll;importorg.junit.jupiter.api.Test;publicclassMyServiceTest{privateMyService service;@BeforeAllpublicstaticvoidsetup(){// 在所有测试之前执行的代码}@BeforeEachpublicvoidsetupEachTest(){// 在每个测试之前执行的代码
        service =newMyService();}@AfterEachpublicvoidteardown(){// 在每个测试之后执行的代码}@AfterAllpublicstaticvoidteardown(){// 在所有测试之后执行的代码}@TestpublicvoidmyTestMethod(){// 测试逻辑}}

3.模拟发送HTTP请求

断言

  • Assertions.assertEquals(expected, actual):断言期望值与实际值相等。
  • Assertions.assertNotEquals(unexpected, actual):断言期望值与实际值不等。
  • Assertions.assertNull(object):断言对象为null。
  • Assertions.assertNotNull(object):断言对象不为null。
  • Assertions.assertTrue(condition):断言条件为true。
  • Assertions.assertFalse(condition):断言条件为false。

使用RestTemplate发送请求

@ExtendWith(SpringExtension.class)@ContextConfiguration(classes =YourApplication.class)publicclassYourControllerTest{@AutowiredprivateRestTemplate restTemplate;@Testpublicvoidshould_handle_request_correctly(){// 模拟请求String url ="http://example.com/api";HttpEntity<String> request =newHttpEntity<>("some request body", headers);// 发送请求ResponseEntity<String> response = restTemplate.exchange(url,HttpMethod.POST, request,String.class);// 断言assertEquals(HttpStatus.OK, response.getStatusCode());assertEquals("expected response body", response.getBody());}}

使用Mock发送请求

importstaticorg.junit.jupiter.api.Assertions.assertEquals;importstaticorg.mockito.Mockito.when;importjava.util.HashMap;importjava.util.Map;importorg.junit.jupiter.api.Test;importorg.junit.jupiter.api.extension.ExtendWith;importorg.mockito.Mock;importorg.mockito.junit.jupiter.MockitoExtension;importorg.springframework.boot.test.context.SpringBootTest;importorg.springframework.boot.test.context.SpringBootTest.WebEnvironment;importorg.springframework.http.MediaType;importorg.springframework.test.web.servlet.MockMvc;importorg.springframework.test.web.servlet.request.MockMvcRequestBuilders;importorg.springframework.test.web.servlet.result.MockMvcResultMatchers;importorg.springframework.test.web.servlet.setup.MockMvcBuilders;importcom.example.yourproject.controller.YourController;@ExtendWith(MockitoExtension.class)@SpringBootTest(webEnvironment =WebEnvironment.RANDOM_PORT)publicclassYourControllerTest{@MockprivateYourController yourController;privateMockMvc mockMvc;@BeforeEachpublicvoidsetUp(){
        mockMvc =MockMvcBuilders.standaloneSetup(yourController).build();}@TestpublicvoidtestYourController()throwsException{// 准备请求参数Map<String,String> requestParams =newHashMap<>();
        requestParams.put("param1","value1");
        requestParams.put("param2","value2");// 设置模拟的响应String expectedResponse ="{\"message\":\"Hello World!\"}";when(yourController.yourMethod(requestParams)).thenReturn(expectedResponse);// 发送请求并验证结果
        mockMvc.perform(MockMvcRequestBuilders.post("/your-endpoint").contentType(MediaType.APPLICATION_JSON).content(JSON.toJSONString(requestParams))).andExpect(MockMvcResultMatchers.status().isOk()).andExpect(MockMvcResultMatchers.content().contentType(MediaType.APPLICATION_JSON_VALUE)).andExpect(MockMvcResultMatchers.jsonPath("$.message").value("Hello World!"));}}

本文转载自: https://blog.csdn.net/weixin_41413137/article/details/136004908
版权归原作者 无名· 所有, 如有侵权,请联系我们删除。

“【Springboot】单元测试Junit5应用”的评论:

还没有评论