인프런 커뮤니티 질문&답변

mycat님의 프로필 이미지

작성한 질문수

스프링 기반 REST API 개발

ModelMapper 테스트 관련 문의

해결된 질문

20.01.23 20:47 작성

·

274

0

안녕하세요. 지난번 질문에 상세히 답해주셔서 감사합니다.

추가로 ModelMapper 테스트 관련해서 문의드립니다.

기선님의 강의를 듣고 ModelMapper를 사용해보려고 하는데, 기존에 Mockito를 사용해서 테스트하던 부분이 ModelMapper를 적용하면서 Mocking이 잘 안되고 있습니다. 어떤 부분이 잘못되었는지 확인 부탁드립니다.

@Test
    public void When_재료_리스트_조회_Then_정상_반환() {

        // Given
        Page<MaterialEntity> materialEntityPage = new PageImpl<>(Collections.singletonList(this.materialEntity));
        given(this.materialRepository.findAll(any(Pageable.class))).willReturn(materialEntityPage);

        Material material = this.modelMapper.map(this.materialEntity, Material.class);
        // modelMapper Mocking 코드
        given(this.modelMapper.map(any(MaterialEntity.class), eq(Material.class))).willReturn(material);

        // When
        final Page<Material> materialPage = this.materialService.readMaterialList(PageRequest.of(0, 10));

        // Then
        assertThat(materialPage.getSize(), is(1));
        assertThat(materialPage.getContent().get(0), instanceOf(Material.class));
        assertThat(materialPage.getContent().get(0).getName(), is(this.materialEntity.getName()));
        assertThat(materialPage.getContent().get(0).getUnitName(), is(this.materialEntity.getUnitEntity().getName()));
    }

@Service
public class MaterialServiceImpl implements MaterialService {

    private final MaterialRepository materialRepository;
    private final UnitRepository unitRepository;
    private final ModelMapper modelMapper;

    public MaterialServiceImpl(MaterialRepository materialRepository, UnitRepository unitRepository, ModelMapper modelMapper) {

        this.materialRepository = materialRepository;
        this.unitRepository = unitRepository;
        this.modelMapper = modelMapper;
    }

    @Override
    public Page<Material> readMaterialList(Pageable pageable) {
        Page<MaterialEntity> materialEntityPage = this.materialRepository.findAll(pageable);

        // 테스트를 위해 추가: testMaterial에 null 값이 들어옴
        Material testMaterial = this.modelMapper.map(materialEntityPage.getContent().get(0), Material.class);

        return materialEntityPage
                .map(materialEntity -> modelMapper.map(materialEntity, Material.class));
    }
}

답변 3

0

백기선님의 프로필 이미지
백기선
지식공유자

2020. 01. 28. 11:18

새해 복 많이 받으시고 홧팅!

0

mycat님의 프로필 이미지
mycat
질문자

2020. 01. 25. 15:37

다시 보니 제가 잘못 생각하는게 있었네요...말씀대로 주먹구구식으로 여쭤봐서 답을 쉽게 찾으려고 했던것 같습니다.

답변 감사드리고, 새해 복 많이 받으세요.

0

백기선님의 프로필 이미지
백기선
지식공유자

2020. 01. 24. 01:35

테스트 코드에서 modelMapper를 모킹하셨는데.. modelMapper가 목 객체인가요?
이런식으로 막히는걸 주먹구구식으로 물어서 해결하시는건 실력 향상에 도움이 되질 않습니다.

mycat님의 프로필 이미지

작성한 질문수

질문하기