반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- mysql executequery error
- No tests found for given includes
- log error
- statement.executequery() cannot issue statements that do not produce result sets.
- OpenFeign
- java
- easy
- java 1.8 11
- AWS CLI
- error
- yum install java
- LeetCode
- java 버전 변경
- aws
- xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools)
- mac os git error
- parse
- java 11
- java 여러개 버전
- JUnit
- Medium
- tls프로토콜확인
- java version
- xcrun: error: invalid active developer path
- Java 1.8
- springboottest
- springboot
- ssl프로토콜확인
- ssl이란?
- 스프링부트테스트
Archives
- Today
- Total
쩨이엠 개발 블로그
[ Spring ] Springboot test - mockito (Mapper 접근) 본문
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
반응형
'개발 > Spring' 카테고리의 다른 글
Maven pom to gradle (0) | 2020.07.13 |
---|---|
[ Spring ] spring init 초기화 메소드 @PostConstruct (0) | 2020.07.01 |
[ Spring ] Failed to determine a suitable driver class (0) | 2020.06.29 |
[ Spring ] SpringBoot test 순서 / 이름 정하기 (@TestMethodOrder / @DisplayName) (0) | 2020.05.20 |
[ Spring ] Spring boot Test (@RunWith, @ExtendWith) (0) | 2020.05.09 |
Comments