java - 创建集成测试
问题描述
我是编写集成测试的新手。我必须编写代码来检查我的 get 方法是否返回代码 200。问题是这个方法非常复杂。我使用 3 个 API 让它运行。下面我留下测试方法的代码:
@Test
@WithUserDetails("operator")
public void getAnalysesByTagId_shouldReturn200() throws Exception {
objectMapper.enable(DeserializationFeature.ACCEPT_EMPTY_STRING_AS_NULL_OBJECT);
MvcResult mvcResult = mockMvc.perform(multipart("/documents")
.file(getMetaDataFile("fileForAnalysisAndTags" + new Random().nextInt() + ".xlsx")))
.andExpect(status().isCreated()).andReturn();
DocumentCreateResponse document = parseResponse(mvcResult, DocumentCreateResponse.class);
MvcResult mvcDocumentDetails = mockMvc.perform(get("/documents/" + document.getId() + "/details")).andReturn();
DocumentDetailsResponse documentDetailsResponse = parseResponse(mvcDocumentDetails, DocumentDetailsResponse.class);
MvcResult mvcResultTag = mockMvc.perform(get("/tags/" + documentDetailsResponse.getAreaId() + "/children")).andReturn();
List<TagResponse> tagResponses = parseResponseList(mvcResultTag, TagResponse.class);
mockMvc.perform(get(TAGS_API + 1 + ANALYSES_API)).andExpect(status().isOk());
}
它返回代码 404 而不是 200,我在最后一行做错了。我还留下了正在测试的方法的代码:
@GetMapping("tags/{tagId}/analyses")
@ApiOperation(value = "Find analyses associated with tag", produces = MediaType.APPLICATION_JSON_VALUE, notes = "Required Role: OPERATOR/USER")
@ApiResponses(value = {
@ApiResponse(code = 200, message = "Analyses found"),
@ApiResponse(code = 404, message = "Not found, incorrect tag ID"),
@ApiResponse(code = 500, message = "Server error, something went wrong"),
@ApiResponse(code = 401, message = "Request lacks valid authentication credentials.")
})
public ResponseEntity<List<FindAnalysisResponse>> getAnalysesByTagId(
@PathVariable("tagId") Long tagId) throws NotFoundException {
var analyses = service.getAnalysesByTagId(tagId)
.stream()
.map(findAnalysisMapper::fromAnalysis)
.collect(Collectors.toList());
return new ResponseEntity<>(analyses, HttpStatus.OK);
}
在日志中我可以看到,只有最后几行会产生错误:
Async:
Async started = false
Async result = null
Resolved Exception:
Type = com.name.common.domain.NotFoundException
ModelAndView:
View name = null
View = null
Model = null
FlashMap:
Attributes = null
MockHttpServletResponse:
Status = 404
Error message = null
Headers = [Vary:"Origin", "Access-Control-Request-Method", "Access-Control-Request-Headers", Content-Type:"text/plain;charset=UTF-8", Content-Length:"15", X-Content-Type-Options:"nosniff", X-XSS-Protection:"1; mode=block", Cache-Control:"no-cache, no-store, max-age=0, must-revalidate", Pragma:"no-cache", Expires:"0", X-Frame-Options:"DENY"]
Content type = text/plain;charset=UTF-8
Body = "Tag not found"
Forwarded URL = null
Redirected URL = null
Cookies = []
我应该怎么做才能让它工作?
解决方案
可能没有标签1存在吗?mockMvc.perform(get(TAGS_API + 1 + ANALYSES_API)).andExpect(status().isOk());
推荐阅读
- sas - 通过取消引用变量来设置数据集
- java - IntStream 映射函数行为
- java - 使用 javac -parameters 在字节码中永久存储参数名称
- javascript - 未设置 Google 跟踪代码管理器自定义事件
- authentication - OAuth2.0/OIDC 中的 grant_type 与 response_type
- javascript - 为什么通过 Object.create 创建的对象在 Chrome 中成功登录到控制台,但在 NodeJS 中却没有?
- angular - HostListener 适用于 ngModel,但不适用于 FormControl
- java - 从 OpenJDK Windows 创建 jre
- android - 奥利奥中的 ACTION_PACKAGE_ADDED
- android - 如何在android下拉列表中添加键