728x90
숨고 클론 코딩 프로젝트를 진행하면서 꼭 해야지 했던 것이 테스트 코드 작성이었습니다.
아직, 테스트 코드의 개념도 없고 목적도 없지만 어떤 맛인지 체크해보기 위해 작성해봤습니다.
테스트 시나리오
- 포스팅 생성
- 포스팅 단건 조회
- junit5를 이용해서 진행
저는 @SpringBootTest를 이용해서 테스트를 진행했습니다.
간단한 특징으로는
- 쉽게 통합 테스트를 위한 환경을 만들 수 있다.
- 모든 빈들을 스캔하고 어플리케이션을 생성할 수 있다.
- 다양한 옵션을 줄 수 있다.
- value와 properties : 프로퍼티를 key=value 형태로 추가할 수 있습니다.
- args: 애플리케이션의 arguments로 값을 전달할 수 있습니다.
- classes : 애플리케이션을 로딩할 때 사용되는 컴포넌트 클래스들을 정의할 수 있습니다.
- webEnvironment : 웹 테스트 환경을 설정할 수 있습니다.
이번에는 간단한 코드를 통해 어떻게 테스트를 진행했는지 보겠습니다.
@SpringBootTest를 붙여주고 필요한 연관관계를 설정합니다.
@SpringBootTest
class PostServiceImplTest {
@Autowired
private PostRepository postRepository;
@Autowired
private PostService postService;
@Autowired
private UsersRepository usersRepository;
..
..
..
}
포스트를 생성하는 테스트입니다.
- 포스트에 대한 데이터를 주고
- 제가 만든 생성 로직을 실행시키고
- 로직의 결과가 저의 예상과 같은지 테스트해봅니다.
@Test
@DisplayName("post 생성")
public void 포스트생성() {
// given
PostCreateRequest postCreateRequest = PostCreateRequest.of("포스팅 제목", "포스팅 내용", 1L, 1L, CommunityType.ALL);
createUserAndSubject();
// when
PostDTO post = postService.createPost(postCreateRequest);
// then
Assertions.assertEquals(post.getTitle(), postCreateRequest.getTitle());
Assertions.assertEquals(post.getId(), 1L);
}
포스트 단건 조회하는 테스트입니다.
- 포스트를 생성하고
- 조회했을 때
- 조회한 포스트가 제가 예상한 포스트와 일치하는지 체크합니다.
@Test
@DisplayName("post 단건 조회")
public void 포스트단건조회() {
//given
createPost();
//when
PostDTO post = postService.getPost(1L);
//then
Assertions.assertEquals(post.getTitle(), "포스팅 제목");
}
공통로직입니다.
public void createUserAndSubject() {
UserCreateRequest userCreateRequest = UserCreateRequest.of("이메일", "비밀번호", "이름", false);
usersRepository.save(Users.of(userCreateRequest, passwordEncoder));
subjectRepository.save(Subject.of("서비스 이름", null));
}
public void createPost() {
PostCreateRequest postCreateRequest = PostCreateRequest.of("포스팅 제목", "포스팅 내용", 1L, 1L, CommunityType.ALL);
createUserAndSubject();
PostDTO post = postService.createPost(postCreateRequest);
}
아직, 테스트의 대한 개념과 이유 그리고 어떻게 해야 하는지 정확하게 아는 것 없이 만든 테스트입니다.
부족한 점이 많습니다. 일부러 아무것도 모르는 상태에서 진행을 해봤습니다.
지금의 테스트 개념을 공부하면서 바꿔나가는 것을 목표로
다음 포스팅은 테스트의 개념부터 시작해보려고 합니다!
728x90
댓글