-
패스트캠퍼스 챌린지 17일차JAVA/Spring 2021. 11. 17. 23:55
JUnit & Mockito
JUnit
- Java의 유닛 테스트를 하기 위한 프레임워크이다.
- JUnit4까지는 유닛 테스트를 진행하기에 어려움이 많았으나 최근 JUnit5로 업데이트되며 이전에 존재했던 여러 불편한 점들이 개선되었다.
- Spring Boot에서도 JUnit4는 사라지고 JUnit5가 기본적으로 제공되고 있다.
Spring Boot에 기본적으로 JUnit5가 제공되고 있기에 테스트 파일을 생성하는 방법도 굉장히 간단하다.
먼저, 테스트할 클래스 파일을 연 뒤 Ctrl + Shift + T를 누르면 아래와 같이 Create New Test 옵션이 뜬다.
'Create New Test' 버튼을 눌러주면 아래와 같이 테스트 이름을 정하고 파일 경로를 설정할 수 있다.
그 후 OK 버튼을 눌러주면 테스트가 생성되는 것을 볼 수 있다.
이제 생성된 테스트에 메서드를 작성하여 테스트를 진행해볼 수 있다.
아래는 테스트하기 위한 간단한 예제 코드이다.
dmaker.service.DMakerServiceTest
class DMakerServiceTest { @Test public void testSomething() { String result = "Hello" + " Spring World!"; // JUnit jupiter에서 나오는 가장 많이 쓰는 검증방법 중 하나이다. assertEquals("Hello Spring World!", result); } }
결과값인 result가 명시된 "Hello Spring World!"와 동일하면 빌드가 성공적으로 이루어지지만 다를 경우엔 아래와 같이 오류가 발생하는 것을 확인할 수 있다.
위는 테스트가 어떤 식으로 작동하는지 간단하게 알아보기 위한 코드이다.
우리는 실질적으로 DMakerService 클래스를 테스트하고자 하기에 테스트 코드를 수정해준다.
dmaker.service.DMakerServiceTest
// @SpringBootTest 어노테이션을 달게 되면 이 테스트 안에서 // 현재 프로젝트에 등록된 모든 Bean을 사용하겠다는 의미이다. @SpringBootTest class DMakerServiceTest { // 우리가 실질적으로 테스트하고자 하는 클래스는 DMakerService이다. private DMakerService dMakerService; // 아래와 같이 DMakerService를 new로 선언하지 않고도 DMakerRepository 등을 사용할 수 있는 것은 // DMaker에 각각의 클래스들이 Bean으로 등록되어있기 때문이다. // private DMakerService dMakerService = new DMakerService(); @Test public void testSomething() { // refactor -> introduce variable을 통해 쉽게 알맞는 타입을 가진 변수명을 생성할 수 있다. List<DeveloperDto> allDevelopers = dMakerService.getAllDevelopers(); System.out.println(allDevelopers); } }
위와 같이 코드를 작성하고 실행을 시키게 되면 아직 DB에 등록된 데이터가 하나도 없기에 결과값이 존재하지 않는다.
테스트를 위해 임시 데이터를 하나 넣어준다.
dmaker.service.DMakerServiceTest
@SpringBootTest class DMakerServiceTest { @Autowired private DMakerService dMakerService; @Test public void testSomething(Developer developer) { dMakerService.createDeveloper(CreateDeveloper.Request.builder() .developerLevel(DeveloperLevel.SENIOR) .developerSkillType(DeveloperSkillType.FRONT_END) .experienceYears(12) .name("name") .age(32) .build()); List<DeveloperDto> allDevelopers = dMakerService.getAllDevelopers(); System.out.println("======================================="); System.out.println(allDevelopers); System.out.println("======================================="); } }
임시 데이터를 하나 삽입해준 뒤 allDevelopers 출력 시 등록한 developer가 출력되는 것을 확인할 수 있다.
Mockito
Mockito 또한 유닛 테스트에 사용할 수 있는 프레임워크로써 Spring Boot에 기본적으로 내장되어있다.
아래와 같은 방법으로 Mockito를 이용해 테스트를 진행할 수 있다.
dmaker.service.DMakerServiceTest
// Mockito를 사용하기 위해 클래스에 어노테이션을 붙여준다. @ExtendWith(MockitoExtension.class) class DMakerServiceTest { // 가상의 Mock으로 테스트 시 DMakerService 안에 넣어준다. @Mock private DeveloperRepository developerRepository; @Mock private RetiredDeveloperRepository retiredDeveloperRepository; // DMakerService에 선언한 Mock들을 주입한다. @InjectMocks private DMakerService dMakerService; @Test public void testSomething(Developer developer) { given(developerRepository.findByMemberId(anyString())) .willReturn(Optional.of(Developer.builder() .developerLevel(SENIOR) .developerSkillType(FRONT_END) .experienceYears(12) .name("name") .age(12) .build())); DeveloperDetailDto developerDetailDto = dMakerService.getDeveloperDetail("memberId"); assertEquals(SENIOR, developerDetailDto.getDeveloperLevel()); assertEquals(FRONT_END, developerDetailDto.getDeveloperSkillType()); assertEquals(12, developerDetailDto.getExperienceYears()); } }
본 포스팅은 패스트 캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.
https://bit.ly/3FVdhDa'JAVA > Spring' 카테고리의 다른 글
패스트캠퍼스 챌린지 19일차 (0) 2021.11.19 패스트캠퍼스 챌린지 18일차 (0) 2021.11.18 패스트캠퍼스 챌린지 16일차 (0) 2021.11.16 패스트캠퍼스 챌린지 15일차 (0) 2021.11.15 패스트캠퍼스 챌린지 14일차 (0) 2021.11.14