일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- No tests found for given includes
- yum install java
- java 여러개 버전
- easy
- java
- java version
- springboottest
- Java 1.8
- LeetCode
- springboot
- no sources given
- JUnit
- el1008e
- error
- java 1.8 11
- java 버전 변경
- OpenFeign
- AWS CLI
- property or field 'jobparameters' cannot be found on object of type
- java 11
- mac os git error
- aws
- 스프링부트테스트
- xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools)
- log error
- springbatch error
- querydsl no sources given
- Medium
- parse
- maybe not public or not valid?
- Today
- Total
쩨이엠 개발 블로그
[ Spring ] Spring boot Test (@RunWith, @ExtendWith) 본문
보통은 테스트 코드를 짜면서 코드를 짠다지만.. 사실 쉽지않다 ㅋㅋㅋㅋ
이번에도 코드를 짜고 그거 테스트하겠다고 테스트코드를 짜기 시작했는데 생각보다 많은걸 알게되어서 정리하는 용도로 쓴다.
내 경우는 MVC가 필요없는 간단한(?) 코드이므로 @SpringBootTest라는 거대한 아이를 쓰지 않는 방향으로 설계했다.
@SpringBootTest는 application을 띄우기때문에 통합테스트에 용이하지만 대신 시간도 오래걸리고 무겁기때문에 단위테스트하는데는 알맞지 않다(서버 올리는데 너무 오래걸려서 짜증났다).
해서 이번에 쓸 Test용 어노테이션은
@RunWith(MockitoJUnitRunner.class)
@ExtendWith(MockitoExtension.class) 이 두개가 되겠다
필요한 dependency
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
DataServiceTests.java
package com.test.service;
//@RunWith(MockitoJUnitRunner.class)
@ExtendWith(MockitoExtension.class)
class DataServiceTests {
@InjectMocks
private DataService service;
@Mock
private WpasDataMapper mapper;
@BeforeEach
public void setUp() {
System.out.println("setUp");
mockMapper();
service.initQcStepItem();
}
@Test
void test_InspectQcData() {
service.inspectQcData();
}
}
@RunWith(MockitoJUnitRunner.class)
Mockito의 Mock 객체를 사용하기 위한 Annotation이다
class 위에 달아준다
@ExtendWith(MockitoExtension.class)
Mockito의 Mock 객체를 사용하기 위한 Annotation이다
class 위에 달아준다
JUnit4에서는 RunWith(MockitoJUnitRunner.class)를,
JUnit5에서는 ExtendWith를 쓰도록 되어있다
@Mock
mock객체를 생성한다
@InjectMocks
생성한 Mock객체를 주입(inject)하여 사용할 수 있도록 만든 객체이다
쉽게 말하면 @InjectMocks에서 쓰는 객체를 @Mock으로 만들어 가져다 붙이는것
Service에 @InjectMocks를
mapper에 @Mock을 붙이면 실제로 mapper가 붙은것처럼 동일하게 사용할 수 있다
실제 Service 코드
DataService.java
@Service
@Slf4j
public class DataService {
@Autowired
private DataMapper mapper;
...
}
@BeforeEach
테스트 케이스 시작 전에 먼저 실행하는 어노테이션이다
직접 하나하나 넣어도 되지만 케이스가 많은 경우엔 이 어노테이션 하나로 끝낼 수 있다
보통 initialize용으로 많이 쓴다
테스트 실행시 setUp 로그가 테스트 마다 나오는 것을 확인 할 수 있다
'개발 > 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 ] Springboot test - mockito (Mapper 접근) (0) | 2020.05.19 |