Language/Java(TestCode)
[TestCode] Mock 객체 만들기 Mockito (JUnit5)
비독개
2022. 9. 4. 11:42
- 사용이유 : 테스트 코드에서 객체 생성시 Mokito를 활용하여 임의로 생성해주어 번거로움을 줄일 수 있다.
Mockito.mock() 메소드를 활용하여 만드는 법
@Test
void createLunchService() { // mock() 메소드로 만드는 방법
LunchRepository lunchRepository = mock(LunchRepository.class);
LunchService lunchService = new LunchService(lunchRepository);
assertNotNull(lunchService);
}
- Mockito가 없다면 위 객체를 만들어주는데 필요한 구현체를 모두 구현해 줘야하기때문에 장황한 코드가 발생하지만 Mockito를 활용하여 위처럼 짧고 간결하게 구성할 수 있다.
@Mock 애노테이션을 활용하여 만드는 법
@Mock
LunchRepository lunchRepository;
@Test
void createLunchService() {
LunchService lunchService = new LunchService(lunchRepository);
assertNotNull(lunchService);
}
- 위처럼 선언해주면된다. 하지만, 위 코드는 에러가 발생할 것이다.
- 그 이유는 해당 클래스에 익스텐션을 추가해줘야 하기 때문이다.
@ExtendWith(MockitoExtension.class)
class LunchServiceTest {
```
}
- 하지만(?) 나의 경우엔 익스텐션을 추가해주고도 에러가 발생하는걸 확인했다.
- 그이유는 stackoverflow를 통해 확인해보니 버전의 문제였다..ㅎ
- gradle 에서 mockito-core의 버전을 2.1.0으로 설정해 두었는데 버전을 3.7.0으로 올려 해결하였다.
testImplementation group: 'org.mockito', name: 'mockito-core', version: '3.7.0'
- 수정 후에는 정상 동작하였다.
파라미터로 받아서 사용하는 방법
@Test
void createLunchService3(@Mock LunchRepository lunchRepository) {
LunchService lunchService = new LunchService(lunchRepository);
assertNotNull(lunchService);
}
- 위처럼 활용이 가능하여 각 테스트 코드마다 객체를 따로 사용할 수 있다.