Skip to content
Snippets Groups Projects
Commit 1c5dc351 authored by Yan0305's avatar Yan0305
Browse files

tests

parent 95ab5a65
No related branches found
No related tags found
No related merge requests found
package com.cardiff.sytest;
import com.cardiff.client_project.controller.nurse.NurseController;
import com.cardiff.client_project.pojo.entity.Nurse;
import com.cardiff.client_project.pojo.vo.NurseVO;
import com.cardiff.client_project.service.NurseService;
import com.cardiff.client_project.utils.Result;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
import org.springframework.boot.test.mock.mockito.MockBean;
import org.springframework.context.annotation.Import;
import org.springframework.http.MediaType;
import org.springframework.security.test.context.support.WithMockUser;
import org.springframework.test.web.servlet.MockMvc;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.Arrays;
import java.util.List;
import static org.mockito.Mockito.*;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*;
@WebMvcTest(NurseController.class)
@Import(NurseTestSecurityConfig.class)
public class LightweightMockMVCTests {
@Autowired
private MockMvc mockMvc;
@MockBean
private NurseService nurseService;
@Autowired
private ObjectMapper objectMapper;
// 测试查询所有护士
@Test
@WithMockUser(roles = "HOSPITAL")
void testSelectAll() throws Exception {
NurseVO nurseVO = new NurseVO();
nurseVO.setName("Test Nurse");
when(nurseService.selectAllNurse(anyInt()))
.thenReturn(Result.success(Arrays.asList(nurseVO)));
mockMvc.perform(post("/nurse/selectAll")
.param("hospitalId", "1"))
.andExpect(status().isOk())
.andExpect(jsonPath("$.data[0].name").value("Test Nurse"));
}
// 测试条件查询
@Test
@WithMockUser(roles = "HOSPITAL")
void testSelectByItem() throws Exception {
Nurse nurse = new Nurse();
nurse.setName("Test");
NurseVO nurseVO = new NurseVO();
nurseVO.setName("Test Nurse");
when(nurseService.selectByItem(any(Nurse.class)))
.thenReturn(Result.success(Arrays.asList(nurseVO)));
mockMvc.perform(post("/nurse/select")
.contentType(MediaType.APPLICATION_JSON)
.content(objectMapper.writeValueAsString(nurse)))
.andExpect(status().isOk())
.andExpect(jsonPath("$.data[0].name").value("Test Nurse"));
}
// 测试更新护士信息
@Test
@WithMockUser(roles = "HOSPITAL")
void testUpdateById() throws Exception {
Nurse nurse = new Nurse();
nurse.setId(1);
nurse.setName("Updated Name");
when(nurseService.update(any(Nurse.class)))
.thenReturn(Result.success());
mockMvc.perform(put("/nurse/update")
.contentType(MediaType.APPLICATION_JSON)
.content(objectMapper.writeValueAsString(nurse)))
.andExpect(status().isOk())
.andExpect(jsonPath("$.code").value(1));
}
// 测试添加护士
@Test
@WithMockUser(roles = "HOSPITAL")
void testInsertNurse() throws Exception {
Nurse nurse = new Nurse();
nurse.setName("New Nurse");
nurse.setEmail("new@hospital.com");
when(nurseService.insertNurse(any(Nurse.class)))
.thenReturn(Result.success());
mockMvc.perform(post("/nurse/insert")
.contentType(MediaType.APPLICATION_JSON)
.content(objectMapper.writeValueAsString(nurse)))
.andExpect(status().isOk())
.andExpect(jsonPath("$.code").value(1));
}
// 测试批量删除
@Test
@WithMockUser(roles = "HOSPITAL")
void testDeleteNurseById() throws Exception {
List<Integer> ids = Arrays.asList(1, 2, 3);
when(nurseService.deleteById(eq(ids), eq("hospital")))
.thenReturn(Result.success());
mockMvc.perform(delete("/nurse/deleteNurseById")
.contentType(MediaType.APPLICATION_JSON)
.content(objectMapper.writeValueAsString(ids)))
.andExpect(status().isOk());
}
}
\ No newline at end of file
package com.cardiff.sytest;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.web.SecurityFilterChain;
@Configuration
public class NurseTestSecurityConfig {
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http
.authorizeHttpRequests(auth -> auth
.requestMatchers("/nurse/**").hasRole("HOSPITAL")
.anyRequest().denyAll()
)
.csrf(csrf -> csrf.disable()); // 新版禁用CSRF的写法
return http.build();
}
}
\ No newline at end of file
package com.cardiff.sytest;
import com.cardiff.client_project.mapper.NurseMapper;
import com.cardiff.client_project.pojo.entity.Nurse;
import com.cardiff.client_project.pojo.vo.NurseVO;
import com.cardiff.client_project.service.imp.NurseServiceImp;
import com.cardiff.client_project.utils.Result;
import org.junit.jupiter.api.Test;
import java.lang.reflect.Field;
import java.util.List;
import static org.junit.jupiter.api.Assertions.*;
public class SimpleUnitTests {
private void injectMockMapper(NurseServiceImp service, NurseMapper mockMapper) {
try {
Field field = NurseServiceImp.class.getDeclaredField("nurseMapper");
field.setAccessible(true); // 允许访问私有字段
field.set(service, mockMapper); // 注入模拟对象
} catch (Exception e) {
throw new RuntimeException("注入Mock Mapper失败", e);
}
}
@Test
//测试状态转换
void testActiveStatusConversion() {
// 创建服务实例
NurseServiceImp service = new NurseServiceImp();
// 创建模拟Mapper
NurseMapper mockMapper = new NurseMapper() {
@Override
public List<Nurse> selectAllNurse(int hospitalId) {
Nurse nurse = new Nurse();
nurse.setStatus(1); // ACTIVE状态
return List.of(nurse);
}
// 其他方法空实现
@Override public Result insertNurseInform(Nurse nurse) { return null; }
@Override public int[] deleteByIdAndType(List<Integer> ids, String type) { return null; }
};
// 通过反射注入
injectMockMapper(service, mockMapper);
// 执行测试
Result result = service.selectAllNurse(1);
List<NurseVO> nurses = (List<NurseVO>) result.getData();
// 验证
assertEquals("ACTIVE", nurses.get(0).getStatus_str());
}
@Test
//测试重复邮箱
void testDuplicateEmailDetection() {
NurseServiceImp service = new NurseServiceImp();
injectMockMapper(service, new NurseMapper() {
@Override
public Result insertNurseInform(Nurse nurse) {
return Result.error("账号已存在");
}
});
Nurse nurse = new Nurse();
nurse.setEmail("exists@test.com");
Result result = service.insertNurse(nurse);
assertEquals("账号已存在", result.getMsg());
}
@Test
// 验证护士信息更新后,数据库中的年龄字段是否被正确修改
void testUpdateNurseInfo() {
NurseServiceImp service = new NurseServiceImp();
//创建模拟Mapper(伪造数据库)
NurseMapper mockMapper = new NurseMapper() {
@Override
public int update(Nurse nurse) {
// 验证传入的年龄是否是测试值
if (nurse.getAge() == 30) {
return 1; // 返回1表示更新成功
}
return 0; // 其他情况返回失败
}
@Override public List<Nurse> selectAllNurse(int id) { return null; }
};
//通过反射注入模拟Mapper
injectMockMapper(service, mockMapper);
Nurse nurseToUpdate = new Nurse();
nurseToUpdate.setId(1001); // 设置护士ID
nurseToUpdate.setAge(30); // 修改年龄为30岁
// 更新验证
Result result = service.update(nurseToUpdate);
assertEquals(1, result.getCode()); // 检查返回码是否为1(成功)
}
}
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment