ํ์ ๊ฐ์ & ํ์ ์กฐํ
package hello.hello_spring.service;
import hello.hello_spring.domain.Member;
import hello.hello_spring.repository.MemberRepository;
import hello.hello_spring.repository.MemoryMemberRepository;
import java.util.List;
import java.util.Optional;
public class MemberService {
// private final MemberRepository memberRepository = new MemoryMemberRepository();
// DI (์์กด์ฑ ์ฃผ์
) ํจํด์ผ๋ก ๋ฐ๊พธ๊ธฐ
private final MemberRepository memberRepository;
public MemberService(MemoryMemberRepository memberRepository) {
this.memberRepository = memberRepository;
}
/*
* ํ์๊ฐ์
* */
public long join(Member member) {
//๊ฐ์ ์ด๋ฆ์ด ์๋ ์ค๋ณต ํ์ X
// Optional<Member> result = memberRepository.findByName(member.getName()); // ctrl+alt+V : ๋ณ์ ์ถ์ถํ๊ธฐ
// result.ifPresent(m -> { //Optional=> ifPresent()๋ฉ์๋ : ๊ฐ์ด ์์ผ๋ฉด!
// throw new IllegalStateException("์ด๋ฏธ ์กด์ฌํ๋ ํ์์
๋๋ค.");
// });
//=> ์ค๋ณต ์ฝ๋ ์ ๋ฆฌ
// memberRepository.findByName(member.getName())
// .ifPresent(m -> {
// throw new IllegalStateException("์ด๋ฏธ ์กด์ฌํ๋ ํ์์
๋๋ค.");
// });
//=> ๋ฉ์๋ ์ถ์ถ (ctrl+alt+T ->7.๋ฉ์๋ ์ถ์ถ)
validateDuplicateMember(member); // ์ค๋ณต ํ์ ๊ฒ์ฆ
memberRepository.save(member);
return member.getId(); //longํ์
์ id๊ฐ ๋ฆฌํด๋จ
}
private void validateDuplicateMember(Member member) {
memberRepository.findByName(member.getName())
.ifPresent(m -> {
throw new IllegalStateException("์ด๋ฏธ ์กด์ฌํ๋ ํ์์
๋๋ค.");
});
}
/*
* ์ ์ฒด ํ์ ์กฐํ
* */
public List<Member> findMembers() {
return memberRepository.findAll();
}
public Optional<Member> findOne(Long memberId) {
return memberRepository.findById(memberId);
}
}
ํ์ ์๋น์ค ํ ์คํธ
ํ ์คํธํ ํด๋์ค์์ ๋จ์ถํค ctrl + shift + T > ์ ํ ์คํธ ์์ฑ > ํ ์คํธํ ๋ฉ์๋ ํด๋ฆญ > ํ์ธ


package hello.hello_spring.service;
import hello.hello_spring.domain.Member;
import hello.hello_spring.repository.MemoryMemberRepository;
import org.assertj.core.api.Assertions;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import static org.assertj.core.api.Assertions.*;
import static org.junit.jupiter.api.Assertions.assertThrows;
class MemberServiceTest {
//MemberService memberService = new MemberService();
//MemoryMemberRepository memberRepository = new MemoryMemberRepository();
//=> ์ด๋ ๊ฒ ํ๋ฉด ๋ ์ธ์คํด์ค๋ฅผ ์์ฑํ๋ ๊ฒ์ด๋ฏ๋ก, ๊ธฐ์กด์ Repository๋ก ํ
์คํธํด์ผํ๋ค.
MemberService memberService;
MemoryMemberRepository memberRepository;
//@BeforeEach : ๊ฐ ํ
์คํธ ์คํ ์ ์ ํธ์ถ๋๋ค. ํ
์คํธ๊ฐ ์๋ก ์ํฅ์ด ์๋๋ก ํญ์ ์๋ก์ด ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ , ์์กด๊ด๊ณ๋ ์๋ก ๋งบ์ด์ค๋ค.
@BeforeEach
public void beforeEach() {
memberRepository = new MemoryMemberRepository();
memberService = new MemberService(memberRepository);
}
@AfterEach
public void aferEach() {
memberRepository.clearStore();
}
@Test
void ํ์๊ฐ์
() { // ํ
์คํธ๋ ๋ฉ์๋๋ช
์ ํ๊ธ๋ก ์ ์ด๋ ๋จ.(์ง๊ด์ ์ผ๋ก ๋ณด๊ธฐ ์ํด)
//ํ
์คํธ๋ฅผ ํ ๋๋ given~when~then ํจํด์ผ๋ก ์์ฑํ๋๊ฒ ์ผ๋ฐ์
//given
Member member = new Member();
member.setName("spring");
//when
Long saveId = memberService.join(member);
//then
Member findMember = memberService.findOne(saveId).get();
assertThat(member.getName()).isEqualTo(findMember.getName());
}
//์ ํ
์คํธ๋ ์ฑ๊ณต์ด์ง๋ง ์์ธ ์ผ์ด์ค๋ ํ์ธํ๋ ๊ฒ์ด ์ข๋ค!
@Test
public void ์ค๋ณต_ํ์_์์ธ() {
//given
Member member1 = new Member();
member1.setName("spring");
Member member2 = new Member();
member2.setName("spring");
//when
memberService.join(member1);
// memberService.join(member2);
//=> ์ด๋ฆ์ ๊ฐ๊ฒ ๋ฃ์ด์ ํ์๊ฐ์
ํ ๊ฒฝ์ฐ ํ
์คํธ ์คํจํจ.
//=> java.lang.IllegalStateException: ์ด๋ฏธ ์กด์ฌํ๋ ํ์์
๋๋ค.
/*
try {
memberService.join(member2);
fail();
} catch (IllegalStateException e) {
assertThat(e.getMessage()).isEqualTo("์ด๋ฏธ ์กด์ฌํ๋ ํ์์
๋๋ค.123123");
}
*/
assertThrows(IllegalStateException.class, () -> memberService
.join(member2));
//then
}
@Test
void findMembers() {
}
@Test
void findOne() {
}
}
'๋ฐฑ์๋(Back-End) ๊ฐ๋ฐ > SpringBoot' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[SpringBoot] 5_ํ์๊ด๋ฆฌ-์น MVC ๊ฐ๋ฐ (0) | 2025.02.26 |
---|---|
[SpringBoot] 4_์คํ๋ง ๋น๊ณผ ์์กด๊ด๊ณ (0) | 2025.02.25 |
[SpringBoot] 3.2_ํ์ ๋ฆฌํฌ์งํ ๋ฆฌ ํ ์คํธ ์ผ์ด์ค ์์ฑ (0) | 2025.02.25 |
[SpringBoot] 3.1_ํ์ ๋ฆฌํฌ์งํ ๋ฆฌ ๊ตฌํ (0) | 2025.02.25 |
[SpringBoot] 2.3_API (@ResponseBody) (0) | 2025.02.25 |