본문 바로가기

Java/Spring-boot

이클립스(스프링 sts)에서 Spring-boot, Jpa 사용 하기 (2)

반응형

https://github.com/loy124/spring-boot-jpa

 

loy124/spring-boot-jpa

spring boot jpa 기초 CRUD 해보기. Contribute to loy124/spring-boot-jpa development by creating an account on GitHub.

github.com

 

src/test/java 에서 

 

test code를 작성해볼 예정이다

 

Test Code는 버그를 줄이고 좋은 코드 퀄리티를 높이기위해 작성하며 

스프링부트는 mehtod단위로 테스트를 쉽게 할수 있게 되어있다

 

스프링부트 프로젝트를 생성하면 기본적으로 test폴더가 존재하는데 

패키지 안에 있는 java 파일을 먼저 public으로 변경해준다 (해당 class를 상속받아서 test code를 작성한다)

또한 test 폴더에서 작성한 내용들은 실제 프로젝트에 영향을 미치지않는다 (DB값 같은건 들어가게 되어있다)

 

먼저 해당 부분을 public으로 바꿔준다

 

그후 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

 

이클립스(스프링 sts)에서 Spring-boot, jpa 사용 하기 (1)

먼저 mySql Workbench에서 스키마(adminstudy 및 table)을 생성해준다 src/main/resource에 있는 application.properties(스프링 프로젝트의 설정)에 가서 설정값들을 입력해준다 server.port=8081 # adminstud..

loy124.tistory.com

에서 만들었던 UserRepository에 의존성을 주입시킨다

 

의존성 주입 

Test코드 내에서는 무조건 각 메소드마다 @Test annotation을 달아줘야 한다 .

 

먼저 create(insert)에 대한 메소드를 작성해보았다.

 

 

미리 선언해놨던 User Dto에 값을 지정해주고 

userRepository.save(user)를 사용하면 된다

 

Test code 실행법은 두가지가있는데

해당 method를 더블클릭하고 상단의 프로젝트 실행 버튼을 누르거나(Junit test) 

 

out line의 해당 메소드에 우클릭후 run as Junit test를 실행하면된다

 

정상적으로 create가 된다면

 

초록색 화면이 나오고 

 

DB 조회를 해보면 (테이블 우측 번개모양)

정상적으로 값이 들어간것을 알 수 있다.

반응형