Anonymous
Модульный тест выполняется неправильно; как бы я ни утверждал, оно всегда проходит
Сообщение
Anonymous » 28 сен 2024, 08:55
Код: Выделить всё
@SpringBootTest(classes = {DemoApplication.class}, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@AutoConfigureMockMvc
public class MockMvcTestor {
@Autowired
private MockMvc mockMvc;
@MockBean
private FriendshipService friendshipService;
@MockBean
private UserService userService;
@Test
@DisplayName("测试 POST 创建好友关系接口")
public void testFriendController_ValidUserId() throws Exception {
// 模拟 userService 的行为
when(userService.getUser(1)).thenReturn(new User()); // 返回一个有效用户
when(userService.getUser(2)).thenReturn(new User()); // 返回一个有效用户
when(friendshipService.getFriendshipByTwoUserId(1, 2)).thenReturn(null); // 模拟没有好友关系
// 执行 POST 请求
mockMvc.perform(MockMvcRequestBuilders.post("/friendship/BuildRelations")
.contentType(MediaType.APPLICATION_FORM_URLENCODED)
.param("userId1", "1")
.param("userId2", "2"))
.andExpect(status().isOk())
.andDo(MockMvcResultHandlers.print())
.andExpect(MockMvcResultMatchers.jsonPath("$.code").value(0)) // 验证返回的 code
.andExpect(MockMvcResultMatchers.jsonPath("$.message").value("Susad")) // 验证返回的 message
.andReturn();
}
@Test
@DisplayName("测试 POST 创建用户接口")
public void testAddUser_ValidUser() throws Exception {
// 创建 UserDTO 对象
UserDTO userDTO = new UserDTO();
userDTO.setUsername("testuser");
userDTO.setPassword("password");
userDTO.setGender("Male");
userDTO.setEmail("test@example.com");
userDTO.setStatus("Active");
// 模拟 userService.addUser() 方法,不返回任何值
doNothing().when(userService).addUser(Mockito.anyString(), Mockito.anyString(), Mockito.anyString(), Mockito.anyString(), Mockito.anyString(), Mockito.any(byte[].class));
// 创建一个模拟的文件
MockMultipartFile avatarFile = new MockMultipartFile("avatorPic", "avatar.jpg", MediaType.IMAGE_JPEG_VALUE, "dummy data".getBytes());
// 发送 POST 请求
mockMvc.perform(MockMvcRequestBuilders.multipart("/users/addUser")
.file(avatarFile)
.param("username", userDTO.getUsername())
.param("password", userDTO.getPassword())
.param("gender", userDTO.getGender())
.param("email", userDTO.getEmail())
.param("status", userDTO.getStatus()))
.andExpect(status().isOk())
.andDo(MockMvcResultHandlers.print())
.andExpect(MockMvcResultMatchers.jsonPath("$.code").value(0))
.andExpect(MockMvcResultMatchers.jsonPath("$.message").value("fal"));
}
}
Вот мой код модульного тестирования, и я занимаюсь разработкой для развертывания проекта на своем сервере. Моя проблема в том, что когда рабочий процесс достигает этого шага,
Код: Выделить всё
- name: Build with Maven
run: mvn clean package
вывод всегда показывает:
Код: Выделить всё
Tests run: 2, Failures: 0, Errors: 0, Skipped: 0
Даже если я использую значение «fal», которого нет во втором методе тестирования, тестирование все равно пройдет.
Я хочу выяснить, почему тестирование не может работать нормально.
Подробнее здесь:
https://stackoverflow.com/questions/790 ... ays-passes
1727502915
Anonymous
[code]@SpringBootTest(classes = {DemoApplication.class}, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) @AutoConfigureMockMvc public class MockMvcTestor { @Autowired private MockMvc mockMvc; @MockBean private FriendshipService friendshipService; @MockBean private UserService userService; @Test @DisplayName("测试 POST 创建好友关系接口") public void testFriendController_ValidUserId() throws Exception { // 模拟 userService 的行为 when(userService.getUser(1)).thenReturn(new User()); // 返回一个有效用户 when(userService.getUser(2)).thenReturn(new User()); // 返回一个有效用户 when(friendshipService.getFriendshipByTwoUserId(1, 2)).thenReturn(null); // 模拟没有好友关系 // 执行 POST 请求 mockMvc.perform(MockMvcRequestBuilders.post("/friendship/BuildRelations") .contentType(MediaType.APPLICATION_FORM_URLENCODED) .param("userId1", "1") .param("userId2", "2")) .andExpect(status().isOk()) .andDo(MockMvcResultHandlers.print()) .andExpect(MockMvcResultMatchers.jsonPath("$.code").value(0)) // 验证返回的 code .andExpect(MockMvcResultMatchers.jsonPath("$.message").value("Susad")) // 验证返回的 message .andReturn(); } @Test @DisplayName("测试 POST 创建用户接口") public void testAddUser_ValidUser() throws Exception { // 创建 UserDTO 对象 UserDTO userDTO = new UserDTO(); userDTO.setUsername("testuser"); userDTO.setPassword("password"); userDTO.setGender("Male"); userDTO.setEmail("test@example.com"); userDTO.setStatus("Active"); // 模拟 userService.addUser() 方法,不返回任何值 doNothing().when(userService).addUser(Mockito.anyString(), Mockito.anyString(), Mockito.anyString(), Mockito.anyString(), Mockito.anyString(), Mockito.any(byte[].class)); // 创建一个模拟的文件 MockMultipartFile avatarFile = new MockMultipartFile("avatorPic", "avatar.jpg", MediaType.IMAGE_JPEG_VALUE, "dummy data".getBytes()); // 发送 POST 请求 mockMvc.perform(MockMvcRequestBuilders.multipart("/users/addUser") .file(avatarFile) .param("username", userDTO.getUsername()) .param("password", userDTO.getPassword()) .param("gender", userDTO.getGender()) .param("email", userDTO.getEmail()) .param("status", userDTO.getStatus())) .andExpect(status().isOk()) .andDo(MockMvcResultHandlers.print()) .andExpect(MockMvcResultMatchers.jsonPath("$.code").value(0)) .andExpect(MockMvcResultMatchers.jsonPath("$.message").value("fal")); } } [/code] Вот мой код модульного тестирования, и я занимаюсь разработкой для развертывания проекта на своем сервере. Моя проблема в том, что когда рабочий процесс достигает этого шага, [code] - name: Build with Maven run: mvn clean package [/code] вывод всегда показывает: [code]Tests run: 2, Failures: 0, Errors: 0, Skipped: 0 [/code] Даже если я использую значение «fal», которого нет во втором методе тестирования, тестирование все равно пройдет. Я хочу выяснить, почему тестирование не может работать нормально. Подробнее здесь: [url]https://stackoverflow.com/questions/79030869/the-unit-test-is-not-running-correctly-no-matter-how-i-assert-it-always-passes[/url]