Java Spring — постоянный объект с API работает, но я не могу сохранить объект с сервисом в тесте, нулевой указатель

#java #spring #hibernate #junit #spring-data

#java #spring #спящий режим #junit #spring-данные

Вопрос:

Я создал API в spring для сохраняющегося объекта из тела JSON, и он работает нормально, но я пытаюсь создать кучу тестов, и мне нужны образцы данных для них. Я пытаюсь сохранить эти данные в тесте, используя сервис, связанный с этим объектом, но когда я пытаюсь это сделать, я получаю исключение NullPointerException. Не могли бы вы, пожалуйста, помочь мне решить эту проблему?

Класс сущности:

 @Entity
@Table(name = "employees")
@NoArgsConstructor
@Data
public class EmployeeEntity {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;
    private int employeeId;
    private String firstName;
    private String lastName;
}
  

Служба, связанная с объектом:

 @Service
public class EmployeeService {

    @Autowired
    EmployeeRepository employeeRepository;

    public void addEmployee(EmployeeEntity employee){
        employeeRepository.save(employee);
    }

    public Iterable<EmployeeEntity> getAllEmployees(){
        return employeeRepository.findAll();
    }

    public Optional<EmployeeEntity> getEmployeeById(Long id){
        return employeeRepository.findById(id);
    }
}
  

Тест, который выдает исключение NullPointerException:

 public class EmployeeCRUDtest {

    TestUtils testUtils = new TestUtils();

    @Autowired
    EmployeeService employeeService;

    @Test
    public void shouldPersistEmployee(){
        EmployeeEntity emp = testUtils.generateSingleRandomEmployee();
        employeeService.addEmployee(emp);
    }
}
  

Комментарии:

1. Посмотрите, поможет ли это руководство: baeldung.com/spring-testing-separate-data-source

Ответ №1:

Вам не хватает аннотации, которая заставляет @Autowired работать в тестах:

 @RunWith(SpringRunner.class)
public class EmployeeCRUDtest