@MockBean
이란?
- 특정 빈을 테스트에서 의존하지 않도록 가짜 빈을 생성해준다.
서비스 계층 코드
- 서비스 계층 코드를 테스트 하는데 persistence 레이어의 구현은 관심사가 아니다.
- 아래의 코드를 어떻게 테스트할 수 있을까?
@Service
public class EmployeeServiceImpl implements EmployeeService {
@Autowired
private EmployeeRepository employeeRepository;
@Override
public Employee getEmployeeByName(String name) {
return employeeRepository.findByName(name);
}
}
@MockBean
이용하기
EmployeeRepository
객체를 mock 하여 문제를 해결한다.- Mokito 테스트 프레임워크 를 이용해 테스트 코드를 작성했다.
employeeRepository.findByName()
이"alex"
라는 문자열을 받으면 특정 객체를 반환하도록 설정한 것이다.
@RunWith(SpringRunner.class)
public class EmployeeServiceImplIntegrationTest {
@TestConfiguration
static class EmployeeServiceImplTestContextConfiguration {
@Bean
public EmployeeService employeeService() {
return new EmployeeServiceImpl();
}
}
@Autowired
private EmployeeService employeeService;
@MockBean
private EmployeeRepository employeeRepository;
@Before
public void setUp() {
Employee alex = new Employee("alex");
Mockito.when(employeeRepository.findByName(alex.getName()))
.thenReturn(alex);
}
@Test
public void whenValidName_thenEmployeeShouldBeFound() {
String name = "alex";
Employee found = employeeService.getEmployeeByName(name);
assertThat(found.getName())
.isEqualTo(name);
}
}
레퍼런스
반응형
'프레임워크 > 스프링 프레임워크' 카테고리의 다른 글
@Transactional 애노테이션 정리 (0) | 2024.01.08 |
---|---|
@AutoConfigureTestDatabase 애노테이션이란? (0) | 2023.08.03 |
@TestConfiguration 애노테이션이란? (0) | 2023.08.03 |
@DataJpaTest 애노테이션이란? (0) | 2023.08.03 |
Spring Boot Configuration Processor 란? (0) | 2023.08.02 |