시작하기 전에
지난 게시글에 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이어야 한다.
- 등록한 게시글을 조회한 뒤 수정을 진행하여 상태값을 비교하여 정상적으로 게시글 수정이 되었는지 테스트를 진행한다.
실행 결과
테스트 코드 작성 시 발생한 에러
- UnsatisfiedDependencyException : Unsatisfied dependency expressed through constructor parameter 0
- 관련 내용 및 해결 방법은 여기에 게시하였습니다.
- 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
'개발진행목록 > 게시판 서비스' 카테고리의 다른 글
[JPA로 게시판 만들기] 지연로딩 적용 (0) | 2025.02.05 |
---|---|
[JPA로 게시판 만들기] API 개발 (0) | 2025.02.05 |
[JPA로 게시판 만들기] TDD, BDD 란 (1) | 2025.01.23 |
[JPA로 게시판 만들기] 서비스, 레포지토리 개발 (0) | 2025.01.18 |
[JPA로 게시판 만들기] 설계 및 엔티티 생성 (0) | 2025.01.16 |