하이 ...!! 여러분 !!
스프링은 TDD (Test Driven Development) 기반의 개발을 할 수 있도록 스프링 프로젝트를 만들때 알아서 테스트 환경을 세팅해준다. 우리는 거기다 코드를 작성해서 테스트를 하면된다.
우리는 지난 포스팅들에서 작성했던 CRUD 프로젝트에서 JUnit을 활용하여 단위테스트를 해볼꺼다.
JUnit?
JUnit은 말그대로 독립된 단위 테스트를 지원해주는 Java의 프레임워크이다.
단위테스트는 소스코드의 특정한 모듈이 내가 의도한 대로 올바르게 동작하는지 검증하는 것을 의미한다.
만약 여러분들이 단위테스트를 잘 작성하면 더 나은 코드를 작성할 수 있고 이는 비용 감소로 이어질테니 잘 작성해서 활용해보길 바란다.
회사에서 일을 하다보면 테스트가 굉장히 귀찮게 여겨지고 .. 이런 테스트 케이스 작성하는 과정을 축소하거나 삭제해버리곤 하는데 ... ( 물론 나도 그렇다...) 이는 굉장히 잘못되고 위험한 방법이니 테스트 케이스를 올바르게 작성하는 습관을 들이도록하자.
테스트 코드 구현
우리는 JUit 5 버전을 사용할 것이다.
구현 전에 내가 이전에 어떻게 CRUD 를 구현했는지 한번 보고 오자. 이걸 보고오셔야 지금 내가 작성한 테스트 코드가 무엇인지 아실 수 있을 테니 말이다.
https://devkingdom.tistory.com/110
우리는 작성한 코드 중 UserService 와 UserDao를 테스트하는 코드를 작성해볼거다.
여기서 우리가 주의해야할 점은 테스트를 수행하기전에 먼저 테스트 메서드가 어떤 상황에서 정상 통과할 것인지 결정해줘야한다.
작성하는 단위 테스트 클래스 역시 POJO 이다.
먼저 아래의 코드는 UserService를 테스트하는 UserServiceTest 클래스이다.
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 com.test.crudPjt.CrudPjtApplication;
import com.test.crudPjt.model.User;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.ActiveProfiles;
import org.springframework.test.context.junit.jupiter.SpringExtension;
import java.util.List;
@ExtendWith(SpringExtension.class)
@SpringBootTest(classes = CrudPjtApplication.class)
@ActiveProfiles("test")
public class UserServiceTests {
@Autowired
private UserService userService;
@Test
public void testGetAllUsers() {
List<User> users= userService.getAllUsers();
Assertions.assertTrue(users.size()>0);
}
@Test
public void testGetUserByUserId() {
User user = userService.getUserByUserId("testId1");
Assertions.assertTrue(user.getUserNo() > 0);
}
@Test
public void testRegisterUser() {
User user = new User(0, "testName", "testId", "testPwd");
User test = userService.registerUser(user);
}
@Test
public void testModifyUser() {
//Todo
}
@Test
public void testRemoveUser() {
//Todo
}
}
|
내 나름대로 ... 정상 통과의 기준을 세워서 코드를 작성해봤다.
테스트 코드를 실행시키는 방법은 아래와 같다. 내가 .. IntelliJ 를 사용하고 있으니 그 기준으로 말씀드리겠다.
클래스 옆의 실행 버튼은 테스트 코드를 전체 실행시키는 것이고, 아래 메서드 옆의 실행 버튼은 각각의 메서드를 하나씩 실행시키는 것이다.
결과는 ..
이렇게 녹색으로 체크 되면 테스트가 성공하는 것이다.
비슷하겠지만 아래는 UserDao에 대한 테스트 클래스니 참고 바란다.
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 com.test.crudPjt.model.User;
import org.junit.jupiter.api.Test;
import java.util.List;
@ExtendWith(SpringExtension.class)
@SpringBootTest(classes = CrudPjtApplication.class)
@ActiveProfiles("test")
public class UserDaoTests {
@Autowired
private UserDao userDao;
@Test
public void testGetAllUsers() {
List<User> users = userDao.getAllUsers();
Assertions.assertTrue(users.size()>0);
}
@Test
public void testGetUserByUserId() {
User user = userDao.getUserByUserId("testId1");
Assertions.assertTrue(user.getUserNo() > 0);
}
@Test
public void testInsertUser() {
User user = new User(0, "testName", "testId", "testPwd");
User test = userDao.insertUser(user);
}
@Test
public void testUpdateUser() {
//Todo
}
@Test
public void testDeleteUser() {
//Todo
}
}
|
아 이렇게 하나하나 테스트하는 코드도 작성할 수 있긴한데... mockMVC라는 녀석을 이용해서 E2E ( End to End ) 테스트도 할 수 있다. 즉 한 api의 요청부터 결과까지 한방에 테스트가 가능하다는 말이다.
이건 추후에 구현해보도록 하겠다.
오늘은 여기까지다. 모두들 즐거운 하루보내고 내일 월요일인데 내일도 화이팅하자 ^^ ㅎㅎ
'Develop > Spring' 카테고리의 다른 글
[Spring] Spring 에서 로그 남기기 (0) | 2020.04.05 |
---|---|
[Spring] Spring AOP 이용하기 (0) | 2020.04.05 |
[Spring] JWT 를 활용한 인증 구현 (7) | 2020.03.28 |
[Spring] Spring 프로젝트 개선하기 - 인터페이스/클래스 분리 (0) | 2020.03.25 |
[Spring] REST에서 CRUD 구현하기 (11) | 2020.03.23 |
댓글