gpt4 book ai didi

java - 如何在 Spring Boot 中为 Controller 编写单元测试

转载 作者:行者123 更新时间:2023-12-01 16:44:11 26 4
gpt4 key购买 nike

我是单元测试和 TDD 的新手。我想对我在 Spring Boot 中编写的 Controller 和服务类应用单元测试。

我已经使用教程实现了测试类。但是,我无法成功实现它。我已经包含了我当前的代码。

Controller

@RestController
@RequestMapping("/api")
public class MyController {
private static final Logger LOGGER = LoggerFactory.getLogger(AdminController.class);
@Autowired
MyService myService;

@PostMapping("/create")
public ResponseEntity<?> createUser(@RequestHeader("Authorization") String token,
@RequestBody User user){
ResponseDTO finalResponse = new ResponseDTO();
try {
ResponseEntity<?> entity = myService.create(token, user);
finalResponse.setMessageCode(entity.getStatusCode());
finalResponse.setMessage("Success");
finalResponse.setError(false);
ResponseEntity<ResponseDTO> finalEntity = ResponseEntity.ok().body(finalResponse);
return finalEntity;
} catch (Exception e) {
finalResponse.setMessageCode(HttpStatus.EXPECTATION_FAILED);
finalResponse.setMessage(e.getMessage());
finalResponse.setError(true);
ResponseEntity<ResponseDTO> finalEntity =
ResponseEntity.ok().body(finalResponse);
return finalEntity;
}
}

响应DTO

public class ResponseDTO {
private HttpStatus messageCode;
private String message;
private String messageDetail;
private Object body;
private boolean error;

//setters and getters
}

当前测试类别

@RunWith(SpringRunner.class)
public class MyControllerTest {
private MockMvc mockMvc;

@InjectMocks
private MyController myController;

@Before
public void setUp() throws Exception {
mockMvc = MockMvcBuilders.standaloneSetup(myController).build();
}

@Test
public void testCreateUser() throws Exception {
mockMvc.perform(post("/api/create")
.accept(MediaType.APPLICATION_JSON))
.andExpect(status().isCreated())
.andExpect(jsonPath("$.*", Matchers.hasSize(1)));
}

}

当我运行测试类时,我收到WARN Resolved [org.springframework.web.bind.MissingRequestHeaderException: Missing request header 'Authorization' for method parameter of type String]

我在这里做错了什么?任何帮助将不胜感激。

最佳答案

你的测试可能是这样的:

 @Test
public void testCreateUser() throws Exception {
mockMvc.perform(post("/api/create")
.accept(MediaType.APPLICATION_JSON)
.header("AUTH_TOKEN", TOKEN)
.content(ObjectToJsonUtil.convertObjectToJsonBytes(user)))
.andExpect(status().isCreated())
.andExpect(jsonPath("$.*", Matchers.hasSize(1)));
}

您必须将对象 user 转换为 json。因此,您为此创建了一个 util 类:

public class ObjectToJsonUtil {
public static byte[] convertObjectToJsonBytes(Object object)
throws IOException {
ObjectMapper mapper = new ObjectMapper();
mapper.setSerializationInclusion(JsonInclude.Include.NON_EMPTY);

JavaTimeModule module = new JavaTimeModule();
mapper.registerModule(module);

return mapper.writeValueAsBytes(object);
}

}

希望对你有帮助!

关于java - 如何在 Spring Boot 中为 Controller 编写单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56070205/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com