쩨이엠 개발 블로그

[ Spring ] Springboot test - mockito (Mapper 접근) 본문

개발/Spring

[ Spring ] Springboot test - mockito (Mapper 접근)

쩨이엠 2020. 5. 19. 12:00
728x90
반응형

 

이번 테스트를 하기 위해서는 initialize 필요한 데이터들을 DB에서 가져와야한다

DB 접근은 하기 싫을 때(못할때) 그치만 것처럼 데이터 리스트를 세팅하려 있는 Mockito 함수에 대해서 정리한다

 

실제 Service 코드

DataService.java

@Service
@Slf4j
public class DataService {

    @Autowired
    private DataMapper dataMapper;

    static Map<TargetKey, LinkedList<TargetData>> targetDataMap;
    static Map<StepConfigKey, Integer> stepConfigMap;

    static List<Integer> cycleList;

    @PostConstruct
    private void init() {
        initMap();
        initStepItem();
    }

    void initMap() {
        stepConfigMap = new HashMap<>();
        targetDataMap = new HashMap<>();
        cycleList = new ArrayList<>();
    }

    void initStepItem() {
        val stepConfigList = dataMapper.getStepConfig();
        for (val item : stepConfigList) {
            stepConfigMap.put(new StepConfigKey(item.getStepId(), item.getItemId(), item.getStName()), item.getStVal());
        }

        val clycleList = dataMapper.getCycleList();

        for (val item : clycleList) {
            cycleList.add(item.getCycle());

        }

    }
}

 

DataService 코드를 보면 처음 initialize DB에서 값을 조회해 Map 넣는다.

테스트에서도 동일하게 사용하면 좋겠지만 받아온 리스트에 대한 update 있기 때문에 DB 사용하기엔 위험성이 크다(아직 데이터가 없음)

Mockito.when thenReturn 으로 대신 dataMapper.getStepConfig() 메소드를 호출해 데이터를 DB에서 조회한 처럼 사용할 있다

쉽게 말해 하는척! 긁어오는척! 업데이트하는척!

 

 

테스트코드

@ExtendWith(MockitoExtension.class)
class DataServiceTests {

    @InjectMocks
    private DataService service;

    @Mock
    private DataMapper mapper;

    @BeforeEach
    public void setUp() {
        System.out.println("setUp");
        setQcStepConfig();
    }


    private void setStepConfig(){
        val stepConfigList = new ArrayList<QcVO>();
        stepConfigList.add(QcVO.builder().stepId("ST001").itemId("WP001").stName("MAX").stVal(50).build());
        stepConfigList.add(QcVO.builder().stepId("ST001").itemId("WP001").stName("MIN").stVal(-50).build());
        stepConfigList.add(QcVO.builder().stepId("ST002").itemId("WP001").stName("STD_1").stVal(10).build());
        stepConfigList.add(QcVO.builder().stepId("ST002").itemId("WP001").stName("STD_10").stVal(10).build());
        stepConfigList.add(QcVO.builder().stepId("ST002").itemId("WP001").stName("STD_5").stVal(10).build());

        Mockito.when(mapper.getStepConfig()).thenReturn(stepConfigList);

    }

    @Test
    void test_InspectStepList() {
        val stepList = mapper.getStepConfig();
        Assert.assertEquals(5, stepList.size());

    }
}

테스트해보면 확인이 가능하다

Assert.xxx 계속 쓰는게 귀찮으니 때에는 static import 사용하여 줄여주기로 한다

 

import static org.junit.Assert.*;

 

실제 테스트 시에는 @BeforeEach 테스트마다 시작전에 데이터를 세팅해주면 service DB 붙은것과 동일하게 테스트를 진행 있다

 

 

728x90
반응형
Comments