🧪 Spring Boot 테스트 코드 예제 – 새롭게 구성한 실습용 예시

📌 도메인 구조: Article

📁 Article.java

package com.example.demo.domain;

import jakarta.persistence.*;
import lombok.*;

@Entity
@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@AllArgsConstructor
public class Article {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String title;

    private String content;

    public void update(String title, String content) {
        this.title = title;
        this.content = content;
    }
}


📁 DTO 클래스

📁 ArticleCreateRequest.java

package com.example.demo.dto;

import lombok.*;

@Getter
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class ArticleCreateRequest {
    private String title;
    private String content;
}

📁 ArticleResponse.java

package com.example.demo.dto;

import lombok.*;

@Getter
@AllArgsConstructor
@Builder
public class ArticleResponse {
    private Long id;
    private String title;
    private String content;
}


📁 Repository

📁 ArticleRepository.java

package com.example.demo.repository;

import com.example.demo.domain.Article;
import org.springframework.data.jpa.repository.JpaRepository;

public interface ArticleRepository extends JpaRepository<Article, Long> {
}


📁 Service

📁 ArticleService.java

package com.example.demo.service;

import com.example.demo.domain.Article;
import com.example.demo.dto.ArticleCreateRequest;
import com.example.demo.dto.ArticleResponse;
import com.example.demo.repository.ArticleRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;

import java.util.Optional;

@Service
@RequiredArgsConstructor
public class ArticleService {

    private final ArticleRepository repository;

    public ArticleResponse create(ArticleCreateRequest request) {
        Article saved = repository.save(new Article(null, request.getTitle(), request.getContent()));
        return toResponse(saved);
    }

    public ArticleResponse get(Long id) {
        Article article = repository.findById(id)
                                    .orElseThrow(() -> new IllegalArgumentException("게시글이 없습니다."));
        return toResponse(article);
    }

    private ArticleResponse toResponse(Article article) {
        return ArticleResponse.builder()
                              .id(article.getId())
                              .title(article.getTitle())
                              .content(article.getContent())
                              .build();
    }
}


✅ 단위 테스트 예제 (ArticleServiceTest.java)