https://github.com/loy124/spring-boot-jpa
src/test/java 에서
test code를 작성해볼 예정이다
Test Code는 버그를 줄이고 좋은 코드 퀄리티를 높이기위해 작성하며
스프링부트는 mehtod단위로 테스트를 쉽게 할수 있게 되어있다
스프링부트 프로젝트를 생성하면 기본적으로 test폴더가 존재하는데
패키지 안에 있는 java 파일을 먼저 public으로 변경해준다 (해당 class를 상속받아서 test code를 작성한다)
또한 test 폴더에서 작성한 내용들은 실제 프로젝트에 영향을 미치지않는다 (DB값 같은건 들어가게 되어있다)
그후 test java 폴더 안에도 repository 패키지를 만든 후
UserRepositoryTest class를 생성해준다.(위의 StudyAdminPageApplicationTests를 상속받으며, 해당 StudyAdminPageApplicationTests 파일을 public으로 안해두면 오류가 발생한다)
해당 class를 바탕으로 C R U D 를 테스트 해볼것이다
User RepositoryTest.java
package com.example.study.repository;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertTrue;
import java.time.LocalDateTime;
import java.util.Optional;
import javax.transaction.Transactional;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import com.example.study.StudyAdminPage1ApplicationTests;
import com.example.study.model.User;
public class UserRepositoryTest extends StudyAdminPage1ApplicationTests {
//UserRepository userRepository = new UserRepository();
// DI = Dependency Injection 의존성주입, 직접 객체를 만들지 않더라도 스프링이 관리
@Autowired
private UserRepository userRepository;
@Test
public void create(){
// String sql = insert into user(%s, %s, %d) value(account, email, age);
User user = new User();
// user.setId(); auto increment
String account ="Testuser04";
String email = "TestUser03@gmail.com";
String phoneNumber = "010-1111-1111";
LocalDateTime createdAt = LocalDateTime.now();
String setCreatedBy = "TestUser04";
user.setAccount(account);
user.setEmail(email);
user.setPhoneNumber(phoneNumber);
user.setCreatedAt(createdAt);
user.setCreatedBy(setCreatedBy);
//save 메소드: user를 받아서 리턴
User newUser = userRepository.save(user);
System.out.println("newUser" + newUser);
}
@Test
public void read(){
//data table 가져오기
// id = 2 인데 Long type이기 때문에
// 옵셔널은 있을수도 있고 없을수도있다 (말그대로 옵션)
Optional<User> user = userRepository.findById(1L);
//user가 존재할때만 sysout 출력
user.ifPresent(selectUser -> {
System.out.println("user : " + selectUser.toString());
});
}
// 컨트롤러의 경우
// @Test
// public User read(@RequestParam Long id){
// //data table 가져오기
// // id = 2 인데 Long type이기 때문에
// // 옵셔널은 있을수도 있고 없을수도있다 (말그대로 옵션)
// Optional<User> user = userRepository.findById(id);
//
// //user가 존재할때만 sysout 출력
// user.ifPresent(selectUSer -> {
// System.out.println("user:" + selectUSer.toString());
// });
//
// return user.get();
// }
@Test
public void update(){
Optional<User> user = userRepository.findById(2L);
user.ifPresent(selectUSer -> {
});
}
@Test
@Transactional //@Transactional을 넣으면 모든 내용을 수행하되 rollback 한다 테스트에 적합
public void delete() {
Optional<User> user = userRepository.findById(1L);
// Assert.assertTrue(user.isPresent());
//junit test 반드시 user는 존재해야한다
assertTrue(user.isPresent());
user.ifPresent(selectUser -> {
userRepository.delete(selectUser);
});
Optional<User> deleteUser = userRepository.findById(1L);
//반드시 false여야 한다
assertFalse(deleteUser.isPresent());
//
// if(deleteUser.isPresent()) {
// System.out.println("데이터가 존재 : " + deleteUser.get());
// }else {
// System.out.println("데이터가 없습니다");
// }
}
// @DeleteMapping("/api/user")
// public void delete(@RequestParam Long id){
//
// }
}
먼저 https://loy124.tistory.com/195
에서 만들었던 UserRepository에 의존성을 주입시킨다
Test코드 내에서는 무조건 각 메소드마다 @Test annotation을 달아줘야 한다 .
먼저 create(insert)에 대한 메소드를 작성해보았다.
미리 선언해놨던 User Dto에 값을 지정해주고
userRepository.save(user)를 사용하면 된다
Test code 실행법은 두가지가있는데
해당 method를 더블클릭하고 상단의 프로젝트 실행 버튼을 누르거나(Junit test)
out line의 해당 메소드에 우클릭후 run as Junit test를 실행하면된다
정상적으로 create가 된다면
초록색 화면이 나오고
DB 조회를 해보면 (테이블 우측 번개모양)
정상적으로 값이 들어간것을 알 수 있다.
'Java > Spring-boot' 카테고리의 다른 글
Spring boot AOP를 활용한 로그 추적하기, 메서드 시간 측정하기 (0) | 2023.07.07 |
---|---|
AOP정의 및 Advice, Pointcut 작성 정리 (0) | 2023.07.06 |
Spring-boot(mysql-mybatis-aws s3(cloudFront) + Vue.js 를 활용한 파일 업로드 하기 - 백엔드 구성 (0) | 2020.04.12 |
Spring-boot(mysql-mybatis-aws s3(cloudFront) + Vue.js 를 활용한 파일 업로드 하기 - 기초 셋팅 (0) | 2020.04.12 |
이클립스(스프링 sts)에서 Spring-boot, Jpa 사용 하기 (1) (0) | 2020.03.15 |