코틀린_스몰프로젝트_1

Kingyj·2025년 2월 20일

개요

  • 코틀린 공부를 위해 기본 강의도 중요하지만, 배운 것을 활용하여 회원가입과 가벼운 게시판 기능을 구현해서 서비스를 만들어보려 한다.

서비스

  • 회원 기능
  • 게시판 기능
  • 댓글 기능

정리 내용

  • 게시판 기능 구현
  • 게시판 테스트
  • 앞으로 진행 계획

게시판 기능 구현

기능별로 폴더를 만들어 정리하고 있다.
이전 팀 프로젝트에서는 파트별로 폴더를 관리했는데,
차이를 느껴보고 싶어서 이와 같은 방법을 선택했다. (개인 프젝이니까..)

게시물 생성과 모든 게시물 조회, 특정 게시물 조회, 게시물 삭제와 수정
CRUD를 구현했다.

Entity 파일.

게시물의 제목,내용,작성자를 나타낸다. val이 아니라 var로 선언해서 값이 변경될 수 있다.

createdAt으로 생성된 시간을 표기한다.
LocalDateTime.now()를 통해 객체가 생성될 때 현재 시간이 자동 저장된다.
val로 설정해서 이 값은 변경이 당연히 불가능하다.

Service와 Repository 그리고 Dto도 만들어주었다.


게시판 Test

게시판 서비스 테스트를 만들었다.

package kotlinProject

import kotlinProject.entity.Post
import kotlinProject.repository.PostRepository
import kotlinProject.service.PostService
import org.junit.jupiter.api.Assertions.assertEquals
import org.junit.jupiter.api.Assertions.assertNotNull
import org.junit.jupiter.api.BeforeEach
import org.junit.jupiter.api.Test
import org.mockito.InjectMocks
import org.mockito.Mock
import org.mockito.Mockito.*
import org.mockito.MockitoAnnotations
import java.util.*

class PostServiceTest {

    @Mock
    private lateinit var postRepository: PostRepository

    @InjectMocks
    private lateinit var postService: PostService

    @BeforeEach
    fun setup() {
        MockitoAnnotations.openMocks(this)
    }

    @Test
    fun `게시글 생성 테스트`() {
        // Given
        val title = "테스트 제목"
        val content = "테스트 내용"
        val author = "테스트 작성자"
        val post = Post(id = 1L, title = title, content = content, author = author)

        `when`(postRepository.save(any(Post::class.java))).thenReturn(post)

        // When
        val savedPost = postService.createPost(title, content, author)

        // Then
        assertNotNull(savedPost)
        assertEquals(title, savedPost.title)
        assertEquals(content, savedPost.content)
        assertEquals(author, savedPost.author)
    }

    @Test
    fun `게시글 단건 조회 테스트`() {
        // Given
        val post = Post(id = 1L, title = "테스트", content = "테스트 내용", author = "작성자")
        `when`(postRepository.findById(1L)).thenReturn(Optional.of(post))

        // When
        val foundPost = postService.getPostById(1L)

        // Then
        assertNotNull(foundPost)
        assertEquals("테스트", foundPost.title)
    }

    @Test
    fun `게시글 삭제 테스트`() {
        // Given
        val post = Post(id = 1L, title = "테스트", content = "테스트 내용", author = "작성자")
        `when`(postRepository.findById(1L)).thenReturn(Optional.of(post))
        doNothing().`when`(postRepository).deleteById(1L)  // deleteById()를 모킹

        // When
        postService.deletePost(1L)

        // Then
        verify(postRepository, times(1)).deleteById(1L)  // deleteById()가 호출되었는지 검증
    }
}


앞으로 진행 계획

회원가입과 로그인 로그아웃 기능을 구현할 것이다.
토큰값을 부여하고, 관리자 계정과 유저 계정을 나눠볼 것이다.

기능 구현도 중요하지만, 이 프로젝트의 주 목적은 학습이다.


0개의 댓글