ํ์ ๊ด๋ฆฌ ์์
3. ํ์ ๋ฆฌํฌ์งํ ๋ฆฌ ํ ์คํธ ์ผ์ด์ค ์์ฑ
- ๊ฐ๋ฐํ ๊ธฐ๋ฅ์ ์คํํด์ ํ ์คํธํ ๋ ์๋ฐ์ main ๋ฉ์๋๋ฅผ ํตํด์ ์คํํ๊ฑฐ๋, ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์ปจํธ๋กค๋ฌ๋ฅผ ํตํด์ ํด๋น ๊ธฐ๋ฅ์ ์คํํ๋ค. ์ด๋ฌํ ๋ฐฉ๋ฒ์ ์ค๋นํ๊ณ ์คํํ๋๋ฐ ์ค๋ ๊ฑธ๋ฆฌ๊ณ , ๋ฐ๋ณต ์คํํ๊ธฐ ์ด๋ ต๊ณ ์ฌ๋ฌ ํ ์คํธ๋ฅผ ํ ๋ฒ์ ์คํํ๊ธฐ ์ด๋ ต๋ค๋ ๋จ์ ์ด ์๋ค.
- ์๋ฐ๋ JUnit ํ๋ ์์ํฌ๋ก ํ ์คํธ๋ฅผ ์คํํด์ ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ค.
- ํ ์คํธ ์ผ์ด์ค๋ฅผ ๋จผ์ ์์ฑํ ํ ๊ฐ๋ฐํ๋ ๋ฐฉ์์ ํ ์คํธ ์ฃผ๋ ๊ฐ๋ฐ(TDD)์ด๋ผ ํ๋ค.
1) ํ ์คํธ ์ผ์ด์ค ์์ฑ
- ๋ณดํต ํ ์คํธํ ๊ธฐ๋ฅ๊ณผ ๋์ผํ ํจํค์ง ์ด๋ฆ์ผ๋ก ์์ฑํ๊ณ 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, ํจํค์ง ๋จ์๋ก ํ ์คํธ๋ฅผ ํ ์๋ ์๋ค.
- ๊ฐ ํ ์คํธ๋ ์์๊ฐ ๋ณด์ฅ๋์ง ์๋๋ค.
3) ํ ์คํธ ์ผ์ด์ค ๊ฒฐ๊ณผ ํ์ธ
- ํ ์คํธ๋ ๊ฐ๊ฐ ๋ ๋ฆฝ์ ์ผ๋ก ์คํ๋์ด์ผ ํ๋ค.
- ํ ์คํธ ์์์ ์์กด ๊ด๊ณ๊ฐ ์๋ ๊ฒ์ ์ข์ ํ ์คํธ๊ฐ ์๋๋ค.
- ์ค๋ฌด์์๋ ๋น๋ ํด์์ ํ ์คํธ ์ผ์ด์ค์ ํต๊ณผํ์ง ๋ชปํ๋ฉด ๋ค์ ๋จ๊ณ๋ก ๋์ด๊ฐ์ง ๋ชปํ๋๋ก ๋ง๋๋ค.
๊ฒ์ฆ ๋ฐฉ๋ฒ 1
- System.out.println("result = " + (result == member));
- ํ ์คํธ ๊ฒฐ๊ณผ๋ฅผ ๊ธ์๋ก ํ์ธํ๋ ๊ฒ์ ๋นํจ์จ์ ์ด๋ค.
๊ฒ์ฆ ๋ฐฉ๋ฒ 2
- org.junit.jupiter.api.Assertions.assertEquals(result, member);
- ์ฑ๊ณต๊ณผ ์คํจ๋ฅผ ํ๋์ ํ์ธํ ์ ์๋ค.
๊ฒ์ฆ ๋ฐฉ๋ฒ 3
- Assertions.assertThat(member).isEqualTo(result); ๋๋ assertThat(member).isEqualTo(result); (static)
- ์ต๊ทผ ๋ง์ด ์ฌ์ฉ๋๋ ๋ฐฉ๋ฒ์ด๊ณ ํธํ๊ฒ ์ฌ์ฉ ๊ฐ๋ฅํ๋ค.
- ์ฑ๊ณต๊ณผ ์คํจ๋ฅผ ํ๋์ ํ์ธํ ์ ์๋ค.
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();
}
}