일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- npm
- 동적계획법
- 클라우드
- 다형성
- Java
- mock
- dotenv
- Solid
- GOF
- github
- bfs
- 서브셋폰트
- git
- 객체지향
- 메모이제이션
- 상속
- dfs
- process.env
- 디자인 패턴
- Secret
- AOP
- azure
- CSS
- package
- DP
- 캡슐화
- 추상화
- MariaDB
- PostgreSQL
- netlify
Archives
- Today
- Total
이것저것 해보기🌼
[JUnit] CRUD 테스트코드 작성하기 본문
TDD(Test-driven Development)
코드의 유지보수 및 운영환경에서 에러를 미리 방지하기 위해 단위별로 검증하는 테스트 프레임워크
단위테스트
작성한 코드가 기대하는대로 동작하는지 검증하는 절차
JUnit
JAVA 기반의 단위테스트를 위한 프레임워크.
Annotation 기반으로 테스트를 지원하며, Assert를 통하여 (예상, 실제) 검증
Gradle Java Project 에서 test 하기
Mock 사용을 위해서는 아래 추가적인 dependencies가 필요하다.
dependencies {
testImplementation 'org.junit.jupiter:junit-jupiter-api:5.7.0'
testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.7.0'
testImplementation group: 'org.mockito', name: 'mockito-core', version: '3.11.2'
testImplementation group: 'org.mockito', name: 'mockito-junit-jupiter', version: '3.11.2'
}
테스트코드:
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
|
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.junit.jupiter.MockitoExtension;
@ExtendWith(MockitoExtension.class)
public class DollarCalculatorTest {
@Mock
public MarketApi marketApi;
@BeforeEach
public void init(){
Mockito.lenient().when(marketApi.connect()).thenReturn(3000);
}
@Test
public void testHello(){
System.out.println("hello");
}
@Test
public void DollarTest(){
DollarCalculator dollarCalculator = new DollarCalculator(marketApi);
dollarCalculator.init();
Calculator calculator = new Calculator(dollarCalculator);
Assertions.assertEquals(60000, calculator.sum(10,10));
Assertions.assertEquals(0, calculator.minus(10,10));
}
@Test
public void MockTest(){
DollarCalculator dollarCalculator = new DollarCalculator(marketApi);
dollarCalculator.init();
Calculator calculator = new Calculator(dollarCalculator);
System.out.println(calculator.sum(10,10));
Assertions.assertEquals(60000, calculator.sum(10,10));
Assertions.assertEquals(0, calculator.minus(10,10));
}
}
|
cs |
@BeforeEach 아래를 보면, connect() 함수가 호출될때 값을 무조건 3000으로 넣어서 테스트가 가능하다.
원래 connect() 함수의 결과와 다르게 내가 직접 값을 지정하고싶을때 Mockito를 활용해 이러한 방식의 테스트가 가능하다.
Spring Project 에서 CRUD 테스트하기
1) 기본 Mock 테스트
통합테스트 : @SpringBootTest
단위테스트 : @Import( 원하는 클래스 )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
@SpringBootTest
//@Import({MarketApi.class, DollarCalculator.class})
public class DollarCalculator {
@MockBean
private MarketApi marketApi;
@Autowired
private DollarCalculator dollarCalculator;
@Test
public void dollarCalculatorTest(){
Mockito.when(marketApi.connect()).thenReturn(3000);
dollarCalculator.init();
int sum = dollarCalculator.sum(10,10);
int minus = dollarCalculator.minus(10,10);
Assertions.assertEquals(60000,sum);
Assertions.assertEquals(0,minus);
}
}
|
cs |
2) GET 테스트
GET 방식에 대해 굳이 웹 실행을 하지 않고 TEST 하는 방법
@WebMvcTest( 원하는 클래스 )
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
32
33
|
@WebMvcTest(CalculatorApiController.class)
@AutoConfigureWebMvc
@Import({Calculator.class, DollarCalculator.class})
public class CalculatorControllerTest {
@MockBean
private MarketApi marketApi;
@Autowired
private MockMvc mockMvc;
@BeforeEach
public void init(){
Mockito.when(marketApi.connect()).thenReturn(3000);
}
public void sumTest(){ //http://localhost:8080/api/sum
mockMvc.perform(
MockMvcRequestBuilders.get("http://localhost:8080/api/sum")
.queryParam("x","10")
.queryParam("y","10")
).andExpect(
MockMvcResultMatchers.status().isOk()
).andExpect(
MockMvcResultMatchers.content().string("60000")
).andDo(MockMvcResultHandlers.print());
}
}
|
cs |
위와 같은 방식으로 REST API 호출을 하지 않고도, parameter x, y에 각각 10, 10을 직접 넣어서 테스트가 가능하다.
응답이 기댓값 60000과 같은지 확인해보는 테스트 코드이다.
DELETE 에도 동일한 방식으로 테스트가 가능하다.
'BE > Spring Boot' 카테고리의 다른 글
[웹] 세션 (0) | 2021.08.29 |
---|---|
[프로그래머스 과제관] 주문 관리 API 서버 개발 (6) | 2021.07.08 |
[Open API] 네이버 Open API 사용하기 (0) | 2021.07.06 |
Validation, Exception 처리하기 (0) | 2021.07.05 |
Annotation 정리 (0) | 2021.07.05 |