[Spring-boot]_4차 MemoryRepository(feat.JUnit)

2022. 3. 5. 17:17[SpringBoot]_/[Spring-boot]_인프런 강의

728x90
반응형

우선 DB를 연동하지 않고 메모리에 저장해서 사용하는 방법을 정리해보았습니다.

 

1] 사용할 domain, 저장소 개념인 repository 를 만듭니다.

2-1] Member.java

안에 id와 name 이라는 2가지의 데이터필드를 설정하고 이를 참조할 함수인

getter 와 setter를 설정합니다. [ 단축키 ALT + insert ]

 

2-2] repository 안의 MemberRepository.java [ Interface ]

도메인인 Member 클래스를 받아서 인터페이스 함수를 설정합니다. 그에 맞는 기능은 MemoryMemberRepository.java 에 구현합니다

 

2-3] MemoryMemberRepository.java

인터페이스인 MemoryRepository를 참조하여 각각의 함수를 오버라이드 하여 기능을 구현하였습니다.

 

3] TEST 코드 작성.

 

spring 에서 제공하는 test 부분에 테스트 코드를 작성합니다.

 

MemoryMemberRepositoryTest.java

ackage hello.hellospring.repository;

import hello.hellospring.domain.Member;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;

import java.util.List;
import java.util.Optional;

import static org.junit.jupiter.api.Assertions.*;

class MemoryMemberRepositoryTest {
    MemoryMemberRepository repository = new MemoryMemberRepository();

    //테스트가 끝날 떄마다 리포시토리를 지워주는 코드를 작성해야한다.
    @AfterEach
    public void afterEach(){
        repository.clearStore();
    }

    @Test
    public void save(){
        Member member = new Member();
        member.setName("Spring");
        //ctrl + shift + enter 시 바로 내려옴
        repository.save(member);

        Member result = repository.findById(member.getId()).get();
        //soutv
        //System.out.println("result = " + (result == member));
        //assert
        //Assertions.assertEquals(member,result);

        //assertThat(member).isEqualTo(result);
    }
    
    @Test
    public void findByName(){
        Member member1 = new Member();
        member1.setName("spring1");
        repository.save(member1);

        //복사한것 동시에 바꾸기 -> shift +f6
        Member member2 = new Member();
        member2.setName("spring2");
        repository.save(member2);

        Member result = repository.findByName("spring1").get();

        Assertions.assertEquals(result,member2);
    }

    @Test
    public void findAll(){
        Member member1 = new Member();
        member1.setName("spring1");
        repository.save(member1);

        Member member2 = new Member();
        member2.setName("spring2");
        repository.save(member2);
        List<Member> result = repository.findAll();
        Assertions.assertEquals(result.size() ,2);
        //System.out.println("result = " + result);
    }

    //TTD 테스트 주도 개발.


}

 

코드설명을 하겠습니다.

 

@AfterEach annotation

해당 어노테이션을 달 경우에는 각각의 테스트가 끝날 때마다 해당 함수를 실행시키는 것이며,

MemorymemberRepository 생성자로 해당 클래스에 지정된 함수를 참조하여 사용합니다.

 

@Test annotation

해당 어노테이션을 달 경우에는 말 그대로 테스트 코드를 실행시 해당 함수의 이름별로 각각 동작하게 됩니다.

 

save() 함수 테스트 를 예시로 들어보겠습니다.

생성자로 Member 도메인을 참조하고, setName으로 저장을 합니다.

그리고나서 save 함수를 이용해서 해당 생성자로 생성된 member라는 변수에 지정된 값을 repository에 저장합니다.

getId를 이용해서 지금 member 에 저장된 값을 result로 받아오고, 이를 

Assertions.assertEquals 함수를 이용해서 값이 같은지 비교하게 됩니다.

해당 test를 실행시키면 console에 다음과 같은 성공화면이 뜨게 됩니다.

 

https://inf.run/P1ni

 

[무료] 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 - 인프런 | 강의

스프링 입문자가 예제를 만들어가면서 스프링 웹 애플리케이션 개발 전반을 빠르게 학습할 수 있습니다., - 강의 소개 | 인프런...

www.inflearn.com

 

728x90
반응형