Spring

Spring에서 ModelMapper를 조롱하는 방법은 무엇입니까?

기록만이살길 2022. 11. 6. 13:37
반응형

Spring에서 ModelMapper를 조롱하는 방법은 무엇입니까? 물어보다

1. 질문(문제점):

내 서비스 계층에 대한 단위 테스트를 작성하려고 합니다.

@SpringBootTest
class ClinicServiceTest {

@Mock
private ProcedureRepository procedureRepository;
@InjectMocks
private ClinicService clinicService;

@Test
void setProcedureStatus() {
    when(procedureRepository.findById(1L)).thenReturn(Optional.of(initialEntity));
    when(procedureRepository.saveAndFlush(expectedEntity)).thenReturn(expectedEntity);
    Procedure assertProcedure = clinicService.setProcedureStatus(1L, "CANCELED");
  }
}

setProcedureStatus내 서비스 클래스가 Spring에 의해 자동 연결되는 ModelMapper를 사용하기 때문에 메소드를 호출하면 NullPointerException이 발생합니다.

@Service
@RequiredArgsConstructor
public class ClinicService {

private final ProcedureRepository procedureRepository;
private final ModelMapper modelMapper;

public Procedure setProcedureStatus(Long procedureId, String status) {
    ...
    return modelMapper.map(procedureEntity, Procedure.class);
}

}

단위 테스트는 Spring 컨텍스트를 발생시키지 않습니다. 이것이 내가 테스트에서 호출할 때 ModelMapper가 Service에서 null인 이유입니다. 이 문제를 해결할 방법이 있습니까?

2. 해결방안:

값을 반환하는 modelmapper 맵을 테스트하는 경우 @Spy를 사용할 수 있습니다. 다음을 사용하는 예:

이 방법은 기본 생성자로 modelmapper를 준비하는 것입니다.

@Spy
ModelMapper modelMapper;

또는 빌더 또는 생성자로 modelmapper 또는 인스턴스 생성 방식으로 다른 유형을 사용자 정의할 수 있습니다.

@Spy
ModelMapper modelMapper=new ModelMapper();

따라서 @InjectMocks를 사용하면 서비스 또는 관련 필드 내부에 주입됩니다.

61171515
반응형