우리 모두 알다시피, 단위 테스트는 애플리케이션 개발에서 유지해야 할 주요한 중요한 관행 중 하나입니다. 이 글에서는 Java 애플리케이션의 단위 테스트 프레임워크인 Junit과 Mockito의 Rest apis에 대해 살펴보겠습니다.
단위 테스트란 무엇인가요?
단위 테스트(Unit Testing)는 애자일 방법론의 연속 프로세스 중 하나로 알려져 있습니다. 단위 테스트는 개발자 수준에서 시작됩니다. 단위 테스트는 소프트웨어 애플리케이션의 개별 구성 요소를 테스트하는 소프트웨어 테스트의 한 유형입니다.
Rest API를 작성한다고 가정하면 각 API에 대해 테스트 케이스를 작성하고 메인 API에 커밋하기 전에 애플리케이션에서 테스트할 수 있습니다. 단위 테스트에서는 서비스를 모의 테스트하므로 매번 데이터베이스를 호출하지 않고 모의 데이터를 사용합니다.
JUnit이란 무엇인가요?
JUnit은 Java 프로그래밍 언어의 단위 테스트 프레임워크입니다. 테스트 중심 개발에서 중요한 역할을 하며 xUnit으로 알려진 단위 테스트 프레임워크 제품군으로 알려져 있습니다.
JUnit은 개발자에게 먼저 테스트한 다음 코딩하는 아이디어를 제공하므로 실제 API를 구현하기 전에 어떤 유형의 데이터가 필요한지 확인할 수 있습니다.
JUnit을 사용하면 프로그래머의 생산성이 향상되고 애플리케이션의 안정성이 유지됩니다.
JUnit은 테스트 케이스 작성을 위한 프레임워크이므로 테스트 방법을 식별하는 어노테이션을 제공하고 예상 결과를 테스트하기 위한 어설션을 제공합니다.
Mockito 프레임워크란 무엇인가요?
Mockito는 Java 애플리케이션의 단위 테스트에 사용되는 Java 기반 Mocking 프레임워크입니다. Mockito는 MIT 라이선스에 따라 오픈 소스 테스트 프레임워크로 출시되었습니다.
Mockito는 내부적으로 Java 리플렉션 API를 사용하여 모의 객체를 생성합니다. Mockito 프레임워크 사용의 주된 목적은 외부 종속성을 모의하고 테스트 코드에서 이를 사용하여 개발을 간소화하는 것입니다. 또한 JUnit 및 TestNG와 같은 다른 테스트 프레임워크와 함께 Mockito를 사용할 수도 있습니다.
Mocking 이란 무엇인가요?
Mocking은 객체의 모의 또는 복제 역할을 하는 객체를 개발하는 프로세스입니다. 즉, 실제 객체를 사용하는 대신 Mocking된 객체를 사용하게 됩니다. 모의 객체는 특정 또는 더미 입력과 출력을 제공합니다.
// JUnit test for saveEmployee method @DisplayName("JUnit test for saveEmployee method") @Test publicvoidgivenEmployeeObject_whenSaveEmployee_thenReturnEmployeeObject(){ // given - precondition or setup when(employeeRepository.findByEmail(employee.getEmail())) .thenReturn(Optional.empty());
// when - action or the behaviour that we are going test List<Employee> employeeList = employeeService.getAllEmployees();
// then - verify the output assertThat(employeeList).isNotNull(); assertThat(employeeList.size()).isEqualTo(2); }
getEmployeeById 메서드에 대한 JUnit 테스트
1 2 3 4 5 6 7 8 9 10 11 12
@DisplayName("JUnit test for getEmployeeById method") @Test publicvoidgivenEmployeeId_whenGetEmployeeById_thenReturnEmployeeObject(){ // given when(employeeRepository.findById(1L)).thenReturn(Optional.of(employee));
// when Employee savedEmployee = employeeService.getEmployeeById(employee.getId()).get();
// then assertThat(savedEmployee).isNotNull(); }
updateEmployee 메서드에 대한 JUnit 테스트
1 2 3 4 5 6 7 8 9 10 11 12 13 14
@DisplayName("JUnit test for updateEmployee method") @Test publicvoidgivenEmployeeObject_whenUpdateEmployee_thenReturnUpdatedEmployee(){ // given - precondition or setup when(employeeRepository.save(employee)).thenReturn(employee); employee.setEmail("lee@gmail.com"); employee.setFirstName("Lee"); // when - action or the behaviour that we are going test Employee updatedEmployee = employeeService.updateEmployee(employee);
// then - verify the output assertThat(updatedEmployee.getEmail()).isEqualTo("lee@gmail.com"); assertThat(updatedEmployee.getFirstName()).isEqualTo("Lee"); }
deleteEmployee 메서드에 대한 JUnit 테스트
1 2 3 4 5 6 7 8 9 10 11 12 13 14
@DisplayName("JUnit test for deleteEmployee method") @Test publicvoidgivenEmployeeId_whenDeleteEmployee_thenNothing(){ // given - precondition or setup long employeeId = 1L;