[Spring][ํ˜ผ๊ณต] 4. ํšŒ์› ๊ด€๋ฆฌ ์˜ˆ์ œ - (3) ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ์ž‘์„ฑ

2021. 8. 7. 20:07ยท๐Ÿ“ Language/โœ JAVA

ํšŒ์› ๊ด€๋ฆฌ ์˜ˆ์ œ

3. ํšŒ์› ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ์ž‘์„ฑ

  • ๊ฐœ๋ฐœํ•œ ๊ธฐ๋Šฅ์„ ์‹คํ–‰ํ•ด์„œ ํ…Œ์ŠคํŠธํ•  ๋•Œ ์ž๋ฐ”์˜ main ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด์„œ ์‹คํ–‰ํ•˜๊ฑฐ๋‚˜, ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ํ†ตํ•ด์„œ ํ•ด๋‹น ๊ธฐ๋Šฅ์„ ์‹คํ–‰ํ•œ๋‹ค. ์ด๋Ÿฌํ•œ ๋ฐฉ๋ฒ•์€ ์ค€๋น„ํ•˜๊ณ  ์‹คํ–‰ํ•˜๋Š”๋ฐ ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๊ณ , ๋ฐ˜๋ณต ์‹คํ–‰ํ•˜๊ธฐ ์–ด๋ ต๊ณ  ์—ฌ๋Ÿฌ ํ…Œ์ŠคํŠธ๋ฅผ ํ•œ ๋ฒˆ์— ์‹คํ–‰ํ•˜๊ธฐ ์–ด๋ ต๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ๋‹ค.
  • ์ž๋ฐ”๋Š” JUnit ํ”„๋ ˆ์ž„์›Œํฌ๋กœ ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•ด์„œ ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•œ๋‹ค.
  • ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋ฅผ ๋จผ์ € ์ž‘์„ฑํ•œ ํ›„ ๊ฐœ๋ฐœํ•˜๋Š” ๋ฐฉ์‹์„ ํ…Œ์ŠคํŠธ ์ฃผ๋„ ๊ฐœ๋ฐœ(TDD)์ด๋ผ ํ•œ๋‹ค.

 

1) ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ์ž‘์„ฑ

repository/MemoryMemberRepositoryTest.java

  • ๋ณดํ†ต ํ…Œ์ŠคํŠธํ•  ๊ธฐ๋Šฅ๊ณผ ๋™์ผํ•œ ํŒจํ‚ค์ง€ ์ด๋ฆ„์œผ๋กœ ์ƒ์„ฑํ•˜๊ณ  class๋Š” ๋’ค์— Test๋ฅผ ๋ถ™์ธ๋‹ค.
  • @Test๋Š” ํ…Œ์ŠคํŠธ ๋ฉ”์„œ๋“œ๋ผ๋Š” ๋œป์œผ๋กœ ํ•ด๋‹น ๋ฉ”์„œ๋“œ๋ฅผ ๋‹จ๋… ์‹คํ–‰์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.
  • ํ•œ ๋ฒˆ์— ์—ฌ๋Ÿฌ ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ๋ฉ”๋ชจ๋ฆฌ DB์— ์ง์ „ ํ…Œ์ŠคํŠธ์˜ ๊ฒฐ๊ณผ๊ฐ€ ๋‚จ์„ ์ˆ˜ ์žˆ๋‹ค. @AfterEach๋Š” ๊ฐ ํ…Œ์ŠคํŠธ๊ฐ€ ์ข…๋ฃŒ๋  ๋•Œ๋งˆ๋‹ค ์‹คํ–‰๋˜๋Š”๋ฐ, ๋ณดํ†ต ๋ฉ”๋ชจ๋ฆฌ DB์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ญ์ œํ•˜๋Š” ์ž‘์—…์„ ํ•œ๋‹ค.
  • given-when-then ๋ฌธ๋ฒ•: ํ…Œ์ŠคํŠธํ•  ๋•Œ ์ง๊ด€์ ์œผ๋กœ ๋ณผ ์ˆ˜ ์žˆ์–ด ์œ ์šฉํ•˜๊ณ  ์ด ๋ฌธ๋ฒ•์„ ๊ธฐ๋ณธ์œผ๋กœ ์ ์  ๋ณ€ํ˜•ํ•˜๋Š” ๊ฒƒ์„ ์ถ”์ฒœํ•œ๋‹ค.
class MemoryMemberRepositoryTest {

    MemoryMemberRepository repository = new MemoryMemberRepository();
    
    @AfterEach
    public void afterEach() {
        repository.clearStore();
    }

    @Test
    public void save() {
        // 1. given
        Member member = new Member();
        member.setName("spring");

        // 2. when
        repository.save(member);

        // 3. then
        // Optional์€ get()์„ ํ†ตํ•ด ๊ฐ’์„ ๊บผ๋‚ผ ์ˆ˜ ์žˆ๋‹ค.
        // ์ข‹์€ ๋ฐฉ๋ฒ•์€ ์•„๋‹ˆ์ง€๋งŒ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ์—์„œ ์‚ฌ์šฉํ•˜๊ธด ์ข‹๋‹ค.
        Member result = repository.findById(member.getId()).get();
        assertThat(result).isEqualTo(member);
    }
}

 

2) ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ์‹คํ–‰

  • ๋ฉ”์„œ๋“œ ํ•˜๋‚˜๋ฅผ ๋‹จ๋…์œผ๋กœ ํ…Œ์ŠคํŠธํ•˜๊ฑฐ๋‚˜ class, ํŒจํ‚ค์ง€ ๋‹จ์œ„๋กœ ํ…Œ์ŠคํŠธ๋ฅผ ํ•  ์ˆ˜๋„ ์žˆ๋‹ค.
  • ๊ฐ ํ…Œ์ŠคํŠธ๋Š” ์ˆœ์„œ๊ฐ€ ๋ณด์žฅ๋˜์ง€ ์•Š๋Š”๋‹ค.

class ์ „์ฒด ์‹คํ–‰

 

3) ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ๊ฒฐ๊ณผ ํ™•์ธ

  • ํ…Œ์ŠคํŠธ๋Š” ๊ฐ๊ฐ ๋…๋ฆฝ์ ์œผ๋กœ ์‹คํ–‰๋˜์–ด์•ผ ํ•œ๋‹ค.
  • ํ…Œ์ŠคํŠธ ์ˆœ์„œ์— ์˜์กด ๊ด€๊ณ„๊ฐ€ ์žˆ๋Š” ๊ฒƒ์€ ์ข‹์€ ํ…Œ์ŠคํŠธ๊ฐ€ ์•„๋‹ˆ๋‹ค.
  • ์‹ค๋ฌด์—์„œ๋Š” ๋นŒ๋“œ ํˆด์—์„œ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์— ํ†ต๊ณผํ•˜์ง€ ๋ชปํ•˜๋ฉด ๋‹ค์Œ ๋‹จ๊ณ„๋กœ ๋„˜์–ด๊ฐ€์ง€ ๋ชปํ•˜๋„๋ก ๋ง‰๋Š”๋‹ค.

 

๊ฒ€์ฆ ๋ฐฉ๋ฒ• 1

 

  • System.out.println("result = " + (result == member));
  • ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ๋ฅผ ๊ธ€์ž๋กœ ํ™•์ธํ•˜๋Š” ๊ฒƒ์€ ๋น„ํšจ์œจ์ ์ด๋‹ค.

๊ฒ€์ฆ ๋ฐฉ๋ฒ• 1 ์„ฑ๊ณต
๊ฒ€์ฆ ๋ฐฉ๋ฒ• 1 ์‹คํŒจ

 

๊ฒ€์ฆ ๋ฐฉ๋ฒ• 2

 

  • org.junit.jupiter.api.Assertions.assertEquals(result, member);
  • ์„ฑ๊ณต๊ณผ ์‹คํŒจ๋ฅผ ํ•œ๋ˆˆ์— ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

๊ฒ€์ฆ ๋ฐฉ๋ฒ• 2 ์„ฑ๊ณต
๊ฒ€์ฆ ๋ฐฉ๋ฒ• 2 ์‹คํŒจ

 

๊ฒ€์ฆ ๋ฐฉ๋ฒ• 3

 

  • Assertions.assertThat(member).isEqualTo(result); ๋˜๋Š” assertThat(member).isEqualTo(result); (static)
  • ์ตœ๊ทผ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” ๋ฐฉ๋ฒ•์ด๊ณ  ํŽธํ•˜๊ฒŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ์„ฑ๊ณต๊ณผ ์‹คํŒจ๋ฅผ ํ•œ๋ˆˆ์— ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

๊ฒ€์ฆ ๋ฐฉ๋ฒ• 3 ์„ฑ๊ณต
๊ฒ€์ฆ ๋ฐฉ๋ฒ• 3 ์‹คํŒจ

 

4) ํšŒ์› ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ์ „์ฒด ์ฝ”๋“œ

package hello.hello.spring.repository;

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

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

import static org.assertj.core.api.Assertions.*;

class MemoryMemberRepositoryTest {

    MemoryMemberRepository repository = new MemoryMemberRepository();

    @AfterEach
    public void afterEach() {
        repository.clearStore();
    }

    @Test
    public void save() {
        // given
        Member member = new Member();
        member.setName("spring");

        // when
        repository.save(member);

        // then
        Member result = repository.findById(member.getId()).get();
        assertThat(result).isEqualTo(member);
    }

    @Test
    public void findByName() {
        // given
        Member member1 = new Member();
        member1.setName("spring1");
        repository.save(member1);
        Member member2 = new Member();
        member2.setName("spring2");
        repository.save(member2);

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

        // then
        assertThat(result).isEqualTo(member1);
    }

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

        // when
        List<Member> result = repository.findAll();

        //then
        assertThat(result.size()).isEqualTo(2);
    }
}

 

public class MemoryMemberRepository implements MemberRepository {
    public  void clearStore(){
        store.clear();
    }
}
์ €์ž‘์žํ‘œ์‹œ (์ƒˆ์ฐฝ์—ด๋ฆผ)
'๐Ÿ“ Language/โœ JAVA' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [Spring][ํ˜ผ๊ณต] 4. ์Šคํ”„๋ง ๋นˆ๊ณผ ์˜์กด๊ด€๊ณ„ - (1) ์ปดํฌ๋„ŒํŠธ ์Šค์บ”๊ณผ ์ž๋™ ์˜์กด๊ด€๊ณ„ ์„ค์ •
  • [Spring][ํ˜ผ๊ณต] 4. ํšŒ์› ๊ด€๋ฆฌ ์˜ˆ์ œ - (4) ํšŒ์› ์„œ๋น„์Šค ๊ฐœ๋ฐœ
  • [Spring][ํ˜ผ๊ณต] 4. ํšŒ์› ๊ด€๋ฆฌ ์˜ˆ์ œ - (2) ํšŒ์› ๋„๋ฉ”์ธ๊ณผ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ๋งŒ๋“ค๊ธฐ
  • [Spring][ํ˜ผ๊ณต] 4. ํšŒ์› ๊ด€๋ฆฌ ์˜ˆ์ œ - (1) ๋น„์ฆˆ๋‹ˆ์Šค ์š”๊ตฌ์‚ฌํ•ญ ์ •๋ฆฌ
Blxxming
Blxxming
CS ์ง€์‹๊ณผ ๊ณต๋ถ€ํ•˜๋‹ค ๋ฐฐ์šด ๊ฒƒ, ๊ฒฝํ—˜ํ•œ ๊ฒƒ ๋“ฑ์„ ๊ธฐ๋กํ•˜๋Š” ๋ธ”๋กœ๊ทธ์ž…๋‹ˆ๋‹ค.
  • Blxxming
    ๐Ÿ’ก๋ฒˆ๋œฉ๐Ÿ’ก
    Blxxming
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
  • ๊ณต์ง€์‚ฌํ•ญ

    • Tech Interview
    • ๐Ÿ“š Tech (246)
      • ๐Ÿ“ Computer Science (96)
        • โœ OS (12)
        • โœ Network & Web (10)
        • โœ Database (11)
        • โœ Data Structure (6)
        • โœ Algorithm (40)
        • โœ Design Pattern (9)
        • โœ Cloud Computing (3)
        • โœ (5)
      • ๐Ÿ“ Language (73)
        • โœ Language (6)
        • โœ C & C++ (11)
        • โœ C# (19)
        • โœ JAVA (37)
      • ๐Ÿ“ Game (43)
        • โœ Computer Graphics (2)
        • โœ Unity (14)
        • โœ Unreal (26)
        • โœ (1)
      • ๐Ÿ“ Book (34)
        • โœ Effective (3)
        • โœ Game Server (16)
        • โœ Clean Code (14)
        • โœ (1)
  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.0
Blxxming
[Spring][ํ˜ผ๊ณต] 4. ํšŒ์› ๊ด€๋ฆฌ ์˜ˆ์ œ - (3) ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ์ž‘์„ฑ
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”