Spring

springboot Test 코드작성방법

Stater 2019. 11. 7. 09:00

 

1. [해당프로젝트]->[src]->[test]->[java]->[패키지 하위]->[test할 Repository 생성]

2. [test할 Repository]클래스에다가 extends [프로젝트명]ApplicationTests를 상속 

    ex-)현재 [프로젝트 명]은 [study]로 되어있어서 [StudyApplicationTests]

 

3. 테스트 코드를 실행할 메서드에 @Test 어노테이션를 꼭 붙여서 실행

 

4. @Transactional  어노테이션을 사용시에 데이터를 롤백 할 수 있는 기능이 있다.

    데이터를 수시로 삭제되거나 수정되는 경우를 방지함으로 용이하다.

 

- 아래는 테스트 코드 작성예시(JPA사용)

package com.example.study.repository;

import com.example.study.StudyApplicationTests;
import com.example.study.model.entity.User;
import org.junit.Assert;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;

import javax.transaction.Transactional;
import java.time.LocalDateTime;
import java.util.Optional;

//test 코드 상속
public class UserRepositoryTest extends StudyApplicationTests {
    @Autowired
    private UserRepository userRepository;
    //@Autowired을 사용함으로써 아래의 코드를 줄일 수 있다.( DI: 의존성주입 )
    //자동으로 객체를 관리
    //private UserRepository userRepository =new UserRepository();
    //테스트코드 작성시 꼭 작성
    @Test
    public void create(){
        //String sql = insert into user(%s,%s,%s)value(account,email,age);
        //객체를 통한 데이터베이스를 관리
        User user = new User();
        user.setAccount("TestUser07");
        user.setEmail("TestUser07@gmail.com");
        user.setPhoneNumber("010-3333-1000");
        user.setCreatedAt(LocalDateTime.now());
        user.setCreatedBy("admin");

       User newUser = userRepository.save(user);
       System.out.println("newUser: " + newUser);



    }

    public void Test(){}

    @Test
    public void read(){
        Optional<User> user = userRepository.findById(2L);

        user.ifPresent(selectUser->{
            System.out.println("User:"+selectUser);
            System.out.println("email:"+ selectUser.getEmail());
        });

    }


    @Test
    @Transactional //롤백
    public void update(){
        Optional<User> user = userRepository.findById(2L);

        user.ifPresent(selectUSer->{
            selectUSer.setAccount("ppp");
            selectUSer.setUpdatedAt(LocalDateTime.now());
            selectUSer.setUpdatedBy("update method()");

            userRepository.save(selectUSer);
        });
    }

//    @DeleteMapping("/api/user")
//     public void delete(@RequestParam Long id){
    @Test
    @Transactional //데이터베이스의 데이터를 유지 시켜준다 롤백 계속해서 삭제가 되면 안되므로
    public void delete(){
        Optional<User> user = userRepository.findById(3L);

        //1L의 값을 있는지 존재여부 확인
        Assert.assertTrue(user.isPresent()); //true

        user.ifPresent(selectUSer->{
            userRepository.delete(selectUSer);
        });

        Optional<User> deleteuser = userRepository.findById(3L);
//@TEST 코드를 위해 작성
//        if(deleteuser.isPresent()){
//            System.out.println("데이터존재"+deleteuser.get());
//        }else{
//            System.out.println("데이터 삭제 데이터가 없음");
//        }
        Assert.assertFalse(deleteuser.isPresent());//반드시 false여야한다.


    }
}

 

반응형

'Spring' 카테고리의 다른 글

Springboot 프로젝트 생성방법 ( Intellij )  (0) 2019.11.09
JPA Enum 형태 관리방법-회원관리  (0) 2019.11.08
Repository  (0) 2019.11.06
Entity 엔티티  (0) 2019.11.05
Naming Convention(네이밍컨벤션)  (0) 2019.11.04