test 클래스 만드는 단축키 : 서비스 클래스명을 클릭한 뒤, Ctrl + Shift + t (window)
테스트의 메서드명은 과감히 한글로 작성해도 된다.
given : 무언가가 주어졌는데
when : 이것을 실행했을 때
then : 어떤 결과가 나와야 돼
@Test
public void 중복_회원_예외() {
// given
Member member1 = new Member();
member1.setName("spring");
Member member2 = new Member();
member2.setName("spring");
// when
memberService.join(member1);
try {
memberService.join(member2);
fail();
} catch (IllegalStateException e) {
assertThat(e.getMessage()).isEqualTo("이미 존재함");
}
// then
}
이렇게 try-catch문을 활용할 수도 있지만,
중복 확인만을 위해 try-catch문을 넣는 것은 애매하다.
memberService.join(member1);
assertThrows(IllegalStateException.class, () -> memberService.join(member2));
같은 클래스의 객체가 여러 개 생성되었을 때는 static을 사용하지 않았다면 코드에 문제가 생길 수 있다.
따라서 생성자를 통해 외부에서 값을 넣어줄 수 있게 바꿔준다!
public class MemberService {
private final MemberRepository memberRepository;
public MemberService(MemberRepository memberRepository) {
this.memberRepository = memberRepository;
}
// ...
}
class MemoryRepositoryTest {
MemberService memberService;
MemoryMemberRepository memberRepository;
@BeforeEach
public void beforeEach() {
memberRepository = new MemoryMemberRepository();
memberService = new MemberService(memberRepository);
}
// ...
}
감사합니다. 이런 정보를 나눠주셔서 좋아요.