У меня есть требование покрыть тестами весь мой личный проект. Пытаясь охватить хотя бы одну службу в своем проекте, я столкнулся с проблемой: запуск теста в режиме отладки проходит нормально, но запуск с другими тестами или отдельно приводит к сбою.
Код, который я пытаюсь проверить:
List ticketDTOs = ticketDTOMapper.allToDTOs(users, tickets);
В этой строке метода моего сервиса я пытаюсь сопоставить объекты билетов с DTO, используя свой собственный преобразователь. Ничего особенного, он просто перебирает заявки и создает DTO, заменяя некоторые числовые поля соответствующими пользовательскими данными. При тестировании вручную работает нормально, так что проблема определенно не в логике картографа.
Но при попытке запустить TicketDTO выглядит как пустой список, хотя все данные до этого это правильно и соответствует всему, что я инициализировал в своем тестовом методе.
В режиме отладки все работает нормально - TicketDTOs соответствует списку, который у меня есть внутри тестового метода.
У меня есть требование покрыть тестами весь мой личный проект. Пытаясь охватить хотя бы одну службу в своем проекте, я столкнулся с проблемой: запуск теста в режиме отладки проходит нормально, но запуск с другими тестами или отдельно приводит к сбою. Код, который я пытаюсь проверить: [code]@Service @RequiredArgsConstructor public class TicketService {
private final TicketRepository ticketRepository; private final TicketServiceClient ticketSC; private final TicketDTOMapper ticketDTOMapper;
UserInfoDTO getUserInfoFromContext(){ JwtAuthenticationToken token = (JwtAuthenticationToken) SecurityContextHolder.getContext().getAuthentication(); String email = token.getTokenAttributes().get("email").toString(); String role = token.getToken().getClaimAsStringList("spring_sec_roles").stream() .filter(r -> r.startsWith("ROLE_")) .findFirst() .orElse(null); String name = token.getTokenAttributes().get("preferred_username").toString(); Integer id = ticketSC.getUserID(email); return new UserInfoDTO(id, role, email, name); }
public ResponseEntity getAllowedTickets() throws InterruptedException { UserInfoDTO userInfo = getUserInfoFromContext(); List tickets; switch (userInfo.role()) { case "ROLE_EMPLOYEE" -> tickets = ticketRepository.getAllTicketsForEmployee(userInfo.id()); case "ROLE_MANAGER" -> { List employeeIDs = ticketSC.getAllEmployeeIDs(); tickets = ticketRepository.getAllTicketsForManager(userInfo.id(), employeeIDs); } case "ROLE_ENGINEER" -> { List employeeAndManagerIDs = ticketSC.getAllEmployeeAndManagerIDs(); tickets = ticketRepository.getAllTicketsForEngineer(userInfo.id(), employeeAndManagerIDs); } default -> throw new IllegalStateException("Unexpected value: " + userInfo.role()); }
assertEquals(ResponseEntity.ok().body(ticketDTOs), response); verify(ticketDTOMapper).allToDTOs(users, tickets); verify(ticketRepository).getAllTicketsForEmployee(1); verify(ticketSC).getUserInfoDTOs(uniqueIDs); } [/code] Неверный метод тестирования: [code]@Test public void testGetAllowedTicketsForEmployee() throws InterruptedException { [/code] Конкретно проблема начинается здесь: [code]List ticketDTOs = ticketDTOMapper.allToDTOs(users, tickets); [/code] В этой строке метода моего сервиса я пытаюсь сопоставить объекты билетов с DTO, используя свой собственный преобразователь. Ничего особенного, он просто перебирает заявки и создает DTO, заменяя некоторые числовые поля соответствующими пользовательскими данными. При тестировании вручную работает нормально, так что проблема определенно не в логике картографа. Но при попытке запустить TicketDTO выглядит как пустой список, хотя все данные до этого это правильно и соответствует всему, что я инициализировал в своем тестовом методе. В режиме отладки все работает нормально - TicketDTOs соответствует списку, который у меня есть внутри тестового метода.