From fdb5af7e7cc0998332e8d98d3dc93258f83983c3 Mon Sep 17 00:00:00 2001 From: dasomel Date: Mon, 1 Sep 2025 20:38:26 +0900 Subject: [PATCH] =?UTF-8?q?EgovSampleServiceImpl=EC=9D=98=20=EC=88=9C?= =?UTF-8?q?=EC=88=98=20=EB=8B=A8=EC=9C=84=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20?= =?UTF-8?q?ID=EB=A1=9C=20=EA=B2=8C=EC=8B=9C=EA=B8=80=20=EC=A1=B0=ED=9A=8C?= =?UTF-8?q?=20=EC=8B=9C,=20Mapper=EA=B0=80=20=EB=B0=98=ED=99=98=ED=95=9C?= =?UTF-8?q?=20=EA=B0=92=EC=9D=84=20=EA=B7=B8=EB=8C=80=EB=A1=9C=20=EB=B0=98?= =?UTF-8?q?=ED=99=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/EgovSampleServiceImplUnitTest.java | 54 +++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 src/test/java/egovframework/example/sample/service/impl/EgovSampleServiceImplUnitTest.java diff --git a/src/test/java/egovframework/example/sample/service/impl/EgovSampleServiceImplUnitTest.java b/src/test/java/egovframework/example/sample/service/impl/EgovSampleServiceImplUnitTest.java new file mode 100644 index 0000000..905786f --- /dev/null +++ b/src/test/java/egovframework/example/sample/service/impl/EgovSampleServiceImplUnitTest.java @@ -0,0 +1,54 @@ +package egovframework.example.sample.service.impl; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.when; + +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; + +import egovframework.example.sample.service.SampleVO; + +/** + * EgovSampleServiceImpl의 순수 단위 테스트. + *

+ * Spring 컨텍스트 로딩 없이 Mockito를 사용하여 Service의 로직만 검증합니다. + * {@link ExtendWith(MockitoExtension.class)}: Mockito 기능을 JUnit 5 테스트에 활성화합니다. + * {@link Mock}: 가짜(Mock) 객체를 생성합니다. 여기서는 DB와 연동하는 Mapper를 가짜로 만듭니다. + * {@link InjectMocks}: Mock 객체를 실제 테스트 대상 객체에 주입합니다. + */ +@ExtendWith(MockitoExtension.class) +class EgovSampleServiceImplUnitTest { + + @InjectMocks + private EgovSampleServiceImpl egovSampleService; + + @Mock + private SampleMapper sampleMapper; + + @Test + @DisplayName("ID로 게시글 조회 시, Mapper가 반환한 값을 그대로 반환해야 한다") + void selectSample_shouldReturnSampleVO_whenDataExists() throws Exception { + // given (준비) + // 1. Mapper가 반환할 가상의 결과 데이터 생성 + SampleVO expectedResult = new SampleVO(); + expectedResult.setId("SAMPLE-00001"); + expectedResult.setName("Mockito 테스트"); + + // 2. Mock Mapper의 동작 정의: selectSample 메서드가 어떤 SampleVO 객체로 호출되든(any()) 위에서 만든 결과를 반환하도록 설정 + when(sampleMapper.selectSample(any(SampleVO.class))).thenReturn(expectedResult); + + // when (실행) + SampleVO actualResult = egovSampleService.selectSample(new SampleVO()); + + // then (검증) + assertNotNull(actualResult); + assertEquals(expectedResult.getId(), actualResult.getId(), "ID가 일치해야 합니다."); + assertEquals(expectedResult.getName(), actualResult.getName(), "이름이 일치해야 합니다."); + } +} \ No newline at end of file