본문 바로가기
개발진행목록/게시판 서비스

[JPA로 게시판 만들기] 테스트 코드 작성

by o3oppp 2025. 1. 23.

시작하기 전에

지난 게시글에 TDD와 BDD에 대해서 학습하였다. 이를 적용하기 위해 테스트 코드를 작성하였으며 BDD 방식으로 진행하였다.


Member 관련 테스트 코드

MemberServiceTest.java

...
@RunWith(SpringRunner.class)
@SpringBootTest
@Transactional
class MemberServiceTest {

    @Autowired
    MemberService memberService;

    @Test
    void 회원가입() {
        // given
        Member member = new Member();
        member.setEmail("test@test.com");
        member.setAddress(new Address("city","zip","street"));

        // when
        Long findMemberId = memberService.join(member);

        // then
        Assertions.assertEquals(member.getId(), findMemberId);
        Assertions.assertEquals(member.getEmail(), "test@test.com");
    }

    @Test
    void 회원중복확인() {
        // given
        Member member = new Member();
        member.setEmail("test@test.com");

        Member member2 = new Member();
        member2.setEmail("test@test.com");

        // when
        memberService.join(member);
        
        // then
        Assertions.assertThrows(IllegalStateException.class,
        				() -> memberService.join(member2));
    }
}
  • 회원가입
    • 회원가입을 진행한다.
    • 가입된 회원의 memberId를 조회한다.
    • 가입된 회원(memberId)과 조회한 회원(findMemberId)의 데이터를 비교하여 정상적으로 회원가입 되었는지 테스트를 진행한다.
  • 회원중복확인
    • 회원 email이 중복되는 경우는 없다고 가정한다.
    • 첫번째 회원의 경우 test@test.com 으로 가입을 진행한다.
    • 두번째 회원의 경우도 test@teset.com 으로 가입을 진행한다.
    • email이 중복되어 가입이 되었는지 테스트를 진행한다.

실행 결과


Post 관련 테스트 코드
...
@RunWith(SpringRunner.class)
@SpringBootTest
@Transactional
class PostServiceTest {

    @Autowired
    MemberService memberService;
    @Autowired
    PostService postService;

    @Test
    void 게시글등록(){
        // given
        Long memberId = createMember();
        PostDto postDto = new PostDto("title","content", LocalDateTime.now());

        // when
        Long postId = postService.savePost(memberId, postDto);

        // then
        Post findPost = postService.findPostById(postId);
        Assertions.assertEquals(findPost.getId(), postId);
    }

    @Test
    void 게시글삭제(){
        // given
        Long memberId = createMember();
        PostDto postDto = new PostDto("title","content", LocalDateTime.now());

        // when
        Long postId = postService.savePost(memberId, postDto);
        postService.deletePost(postId);

        // then;
        Post findPost = postService.findPostById(postId);
        Assertions.assertEquals(PostStatus.DELETE, findPost.getStatus()
        , "게시글 삭제 시 상태는 DELETE");
    }

    @Test
    void 게시글수정(){
        // given
        Long memberId = createMember();
        PostDto postDto = new PostDto("title","content", LocalDateTime.now());

        // when
        Long postId = postService.savePost(memberId, postDto);
        postService.updatePost(postId, postDto);

        // then;
        Post findPost = postService.findPostById(postId);
        Assertions.assertEquals(PostStatus.MODIFY, findPost.getStatus()
        , "게시글 수정 시 상태는 MODIFY");
    }

    private Long createMember() {
        Member member = new Member();
        member.setEmail("test@test.com");
        member.setAddress(new Address("city","zip","street"));

        return memberService.join(member);
    }
}
  • 게시글 등록
    • 가입된 회원만 게시글을 등록할 수 있기 때문에 회원가입을 진행한다.
    • 게시글을 등록한다.
    • 가입된 회원(memberId)과 조회한 회원(findMemberId)의 데이터를 비교하여 정상적으로 회원가입 되었는지 테스트를 진행한다.
    • 게시글을 등록하고 등록한 게시글이 데이터베이스에 동일하게 추가 되었는지 비교하여 정상적으로 게시글 등록이 되었는지 테스트를 진행한다.
  • 게시글 삭제
    • 게시글 삭제 시 상태는 DELETE이어야 한다.
    • 등록한 게시글을 조회한 뒤 삭제를 진행하여 상태값을 비교하여 정상적으로 게시글 삭제가 되었는지 테스트를 진행한다.
  • 게시글 수정
    • 게시글 수정 시 상태는 MODIFY이어야 한다.
    • 등록한 게시글을 조회한 뒤 수정을 진행하여 상태값을 비교하여 정상적으로 게시글 수정이 되었는지 테스트를 진행한다.

실행 결과


테스트 코드 작성 시 발생한 에러
  1. UnsatisfiedDependencyException : Unsatisfied dependency expressed through constructor parameter 0 
    •    관련 내용 및 해결 방법은 여기에 게시하였습니다.
  2. expected at least 1 bean which qualifies as autowire candidate
    •    관련 내용 및 해결 방법은 여기에 게시하였습니다.

전체 코드

 

to_post/src/test/java/project/post/service at main · pparkcoder/to_post

[Side Project] SpringBoot + JPA를 활용한 게시판 만들기. Contribute to pparkcoder/to_post development by creating an account on GitHub.

github.com