importorg.junit.jupiter.api.Test;importstaticorg.assertj.core.api.Assertions.*;classCalculatorTest{@Testvoid 두_수를_더하면_합을_반환한다(){// Givenint a =3, b =4;// Whenint result =Calculator.add(a, b);// ThenassertThat(result).isEqualTo(7);}}
@Testvoid0으로_나누면_ArithmeticException이_발생한다(){// When & ThenassertThatThrownBy(()->Calculator.divide(10,0)).isInstanceOf(ArithmeticException.class).hasMessage("/ by zero");}// 예외 타입만 빠르게 검증할 경우@Testvoid 존재하지_않는_게시글_조회시_예외가_발생한다(){assertThatExceptionOfType(ResourceNotFoundException.class).isThrownBy(()-> postService.findById(999L));}
@Test@Timeout(value =500, unit =TimeUnit.MILLISECONDS)// 500ms 초과 시 실패void 조회는_500ms_안에_완료되어야_한다(){ postService.findAll();}
@Test@Disabled("아직 구현 전 — 스펙 확정 후 활성화")void 미구현_기능_테스트(){// 실행되지 않음}
@DisplayName("PostService 테스트")classPostServiceTest{privatePostService postService;privateFakePostRepository fakePostRepository;@BeforeEach// 각 테스트 메서드 실행 전 초기화voidsetUp(){ fakePostRepository =newFakePostRepository(); postService =newPostService(fakePostRepository);}@Test@DisplayName("게시글 생성 시 ID가 부여된다")voidcreatePost_assignsId(){// GivenCreatePostCommand command =newCreatePostCommand("제목","내용");// WhenPost post = postService.create(command);// ThenassertThat(post.getId()).isNotNull();}@Test@DisplayName("존재하지 않는 게시글 조회 시 예외가 발생한다")voidfindById_notFound_throwsException(){assertThatThrownBy(()-> postService.findById(999L)).isInstanceOf(ResourceNotFoundException.class);}}
@DisplayName("PostService 테스트")classPostServiceTest{@Nested@DisplayName("게시글 생성")classCreate{@Test@DisplayName("정상 생성 시 ID가 부여된다")voidsuccess(){...}@Test@DisplayName("제목이 비어있으면 예외가 발생한다")voidemptyTitle_throwsException(){...}}@Nested@DisplayName("게시글 조회")classFind{@Test@DisplayName("정상 조회 시 게시글을 반환한다")voidsuccess(){...}}}