Back-end/Spring

회원 관리 프로그램 (MVC구조, Test메서드 체험)

calvin9150 2021. 3. 13. 08:49

컨트롤러 : 웹 MVC의 컨트롤러 역할

서비스 : 핵심 비즈니스 로직 구현

리포지토리 : 데이터베이스 접근, 도메인 객체를 DB에 저장하고 관리

도메인 : 비즈니스 도메인 객체... ex) 회원, 주문, 쿠폰 등등.. 주로 DB에서 저장, 관리

 

Optional<generic> : 해당 타입의 객체를 포장해주는 래퍼 클래스. 조건문 업이 null값을 예외처리가능 .

                           java8에서 도입되었다.

 

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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
package hello.hellospring.repository;
 
import hello.hellospring.domain.Member;
import org.assertj.core.api.Assertions;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.Test;
 
import java.util.List;
import java.util.Optional;
 
public class MemoryMemberRepositoryTest {
 
    memoryMemberRepository repository = new memoryMemberRepository();
 
    @AfterEach // 메서드가 실행이 끝날때마다 이걸 실행.. 콜백메서드 라고 보면 된다.
    public void afterEach() {
        repository.clearStore();
    }
    // @Test는 순서 보장이 안된다. 따라서 모든 테스트 메서드는 순서 의존성을 없애야 한다.
 
    @Test
    public void save() {
        Member member = new Member();
        member.setName("spring");
 
        repository.save(member);
 
        Member result = repository.findById(member.getId()).get();
 
        //Assertions.assertEquals(result, member);
        org.assertj.core.api.Assertions.assertThat(member).isEqualTo(result);
        //ㄴ assertThat 에서 member가 result랑 같으냐? 라는 뜻으로 검증한다.
 
    }
 
    @Test
    public void findByName(){
        Member member1 = new Member();
        member1.setName("spring1");
        repository.save(member1);
 
        Member member2 = new Member(); // shift+f6 : 같은 변수명 일괄 수정
        member2.setName("spring1");
        repository.save(member2);
 
        Member result = repository.findByName("spring1").get();
 
        Assertions.assertThat(result).isEqualTo(member1);
 
    }
 
    @Test
    public void findAll(){
        Member member1 = new Member();
        member1.setName("spring1");
        repository.save(member1);
 
        Member member2 = new Member();
        member2.setName("spring1");
        repository.save(member2);
 
        List<Member> result = repository.findAll();
 
        Assertions.assertThat(result.size()).isEqualTo(2);
 
    }
 
}
 
cs

 

@Test는 순서 보장이 안된다. 따라서 모든 테스트 메서드는 순서 의존성을 없애야 한다.

 

TDD (Test-Driven Development) : 테스트 주도 개발... 테스트 틀을 먼저 만들고 나중에 메인메서드에 넣는다.

 

DI (Dependency Injection) : 외부에서 의존 객체를 생성하여 넘겨주는 의존성 주입. IoC 컨테이너에서 객체를 생성한 후 생성된 객체를 다른 객체에 주입한다. IoC 컨테이너에서 생성된 객체들을 한번에 관리 할 수 있는 장점이 있음.

'Back-end > Spring' 카테고리의 다른 글

Spring 웹 개발 방식 3가지  (0) 2021.03.13
spring boot 프로젝트 생성  (0) 2021.03.12
프로젝트 생성  (0) 2021.03.11