如何为以下异常处理代码编写junit测试用例?
Posted
技术标签:
【中文标题】如何为以下异常处理代码编写junit测试用例?【英文标题】:How to write junit test cases for below exception handling code? 【发布时间】:2021-12-13 09:27:08 【问题描述】:@PostMapping("/addCompany")
public Company createCompany(@Valid @RequestBody Company company, Errors errors)
if (errors.hasErrors())
throw new ValidationException(errors.getFieldError().getDefaultMessage());
return companyService.addCompany(company);
【问题讨论】:
您只需使用模拟的Errors
对象调用createCompany
方法……您尝试了吗?
谢谢您的回复先生,我没有尝试使用模拟错误对象...您能帮我吗?
【参考方案1】:
您可以通过两种方式对其进行测试:
控制器单元测试 Web 层测试单元测试:
模拟Errors
并调用 createCompany
并将该模拟作为参数。
验证是否抛出异常
Web层测试:
使用mockMvc
发布无效请求
检查是否返回错误代码
@WebMvcTest(CompanyController.class)
class CompanyControllerTest
private static final String CREATE_COMPANY_ENDPOINT = "/addCompany/";
@Autowired
private MockMvc mockMvc;
@Test
void respondsWith4xxOnInvalidCreateCompanyRequest() throws Exception
String invalidRequest = "\"id\":\"aaa\", \"name\":\"bbb\""
MockHttpServletRequestBuilder builder = MockMvcRequestBuilders
.post(CREATE_COMPANY_ENDPOINT)
.content(invalidRequest)
.contentType(MediaType.APPLICATION_JSON_VALUE);
this.mockMvc.perform(builder)
.andExpect(status().is4xxClientError());
在这种情况下,我非常喜欢 Web 层测试 - 你检查实际的验证逻辑。 Mocking Errors 除了代码覆盖率之外什么都没有。
最重要的是:
您对验证错误的处理是微不足道的。如果您从参数列表中删除Errors
,则在输入无效时,Spring 将抛出MethodArgumentNotValidException
和BindingResult
,其中包含您需要的所有数据。
【讨论】:
以上是关于如何为以下异常处理代码编写junit测试用例?的主要内容,如果未能解决你的问题,请参考以下文章
为 Java 中的自定义检查异常编写 JUnit 测试用例?
如何为 Spring 托管 bean 编写 Junit 测试用例?