개발/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
반응형