Spring boot 如何在测试用例中处理异常
} } }Spring boot 如何在测试用例中处理异常,spring-boot,controller,mockmvc,springrunner,Spring Boot,Controller,Mockmvc,Springrunner,} } } 我试图使用Spring Runner为Spring boot controller编写测试用例,在我的控制器中,我想验证employee对象,为此,我编写了Validate Service interface。上面的测试用例通过了Validate employee.while调试上面的测试用例。调试点没有进入validationServiceImpl类。我想在Validate employee对象时抛出错误。如何处理测试用例中的异常。实际上您模拟了ValidationService依
我试图使用Spring Runner为Spring boot controller编写测试用例,在我的控制器中,我想验证employee对象,为此,我编写了Validate Service interface。上面的测试用例通过了Validate employee.while调试上面的测试用例。调试点没有进入validationServiceImpl类。我想在Validate employee对象时抛出错误。如何处理测试用例中的异常。实际上您模拟了
ValidationService
依赖关系:
public interface ValidationService {
void validateEmp(Employee employee) ;
}
@Slf4j
@Service
public class ValidateServiceImpl implements ValidationService {
@Override
public void validateEmp(Employee employee) {
if(employee.getAge()!=0){
log.info("Age can not be 0");
}
}
并且您没有为指定模拟行为。因此,它允许在不引发任何异常的情况下调用validatorService
依赖项。它的工作原理是validateEmp()
方法的设计目的不是返回被测试方法的工作流所需的任何内容
提醒一下,带有WebMvcTest
注释的测试旨在关注控制器测试,而不是服务测试。您可以删除
@MockBean
注释,使validationService
成为真正的实现,而不是模拟:
@MockBean
ValidationService validationService;
但是请注意,测试ValidationService
的更好方法是为其创建单元测试
最后还要注意的是,更好的方法是使用javax.validation
API来验证输入。您可以在Employee类中使用注释来定义字段上的约束,也可以在控制器中使用注释来验证参数,例如:
ValidationService validationService;
感谢您的重播。如何在测试验证员工对象时检查异常。使用JUnit。谢谢你的快速重播。你救了我一天
@MockBean
ValidationService validationService;
ValidationService validationService;
import javax.validation.Valid;
...
@PostMapping(value = "/insert",consumes = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity insertEmployee(@Valid @RequestBody Employee employe){
// validationService.validateEmp(employee); // Not required any longer
employeeService.create(employee);
return ResponseEntity.ok().build();
}