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();    
 }