-
[Android] Mockito Plugin 세팅 - MockMakerMobile Engineering 2020. 4. 19. 16:07
TDD를 해야 한다는 것은 굳이 설명할 필요가 없을 정도로 잘 알고 계시리라 생각합니다. 그중에서 DI 환경에서 테스트 코드를 작성할때 사용하는 Mock은 필수라고 할 수 있습니다. 그중에서 Mockito와 PowerMock을 많이 사용합니다. 개인적으로 테스트 코드를 작성할때 Mock 라이브러리는 심플하고 쉽게 사용할 수 있는 것을 선호해서 Mockito를 사용합니다. 안드로이드에서 Mockito를 이용해서 유닛 테스트 코드를 만들때 사전에 해줘야 하는 세팅을 알려드리고자 합니다. Mockito를 사용하는 분이라면 한번 맞닥뜨렸을 오류..
Could not initialize plugin: interface org.mockito.plugins.MockMaker
아래의 그림처럼 잘 나가다가 갑자기 오류가 나면서 테스트 코드가 실패합니다.
에러의 내용은 아래와 같습니다. 내용인 즉슨, 'MockMaker 플러그인을 초기화할 수 없습니다.' Mockito를 사용하기 위해서 뭔가를 해줘야 하는 모양입니다.
java.lang.IllegalStateException: Could not initialize plugin: interface org.mockito.plugins.MockMaker (alternate: null) at org.mockito.internal.configuration.plugins.PluginLoader$1.invoke(PluginLoader.java:74) at com.sun.proxy.$Proxy8.isTypeMockable(Unknown Source) at org.mockito.internal.util.MockUtil.typeMockabilityOf(MockUtil.java:29) at org.mockito.internal.util.MockCreationValidator.validateType(MockCreationValidator.java:22) at org.mockito.internal.creation.MockSettingsImpl.validatedSettings(MockSettingsImpl.java:241) at org.mockito.internal.creation.MockSettingsImpl.build(MockSettingsImpl.java:229) at org.mockito.internal.MockitoCore.mock(MockitoCore.java:62) at org.mockito.Mockito.mock(Mockito.java:1908) at org.mockito.Mockito.mock(Mockito.java:1817)
그래서 구글을 검색해서 찾아보니 ClassPath에 MockMaker Interface가 사용할 구현체를 특정 경로에 지정해줘야 한다고 합니다.
https://site.mockito.org/javadoc/current/index.html?org/mockito/plugins/MockMaker.html
그래서 MockMaker를 사용하기 위해서 프로젝트의 아래의 경로에 'org.mockito.plugins.MockMaker'라는 이름으로 파일을 생성합니다.
'org.mockito.plugins.MockMaker'안에 아래와 같은 문자열을 작성합니다. 만약에 MockMaker 구현체를 별도로 만들어서 사용한다면 구현체의 패키지와 클래스명을 기재하면 됩니다.
mock-maker-inline
파일을 생성하고 테스트 코드를 동작시키면 아래와 같이 깔끔하게 성공! 참 쉽죠?
이렇게 특정 인터페이스를 사용함에 있어서 ClassPath에 파일을 만들고 구현체를 getClass()로 읽어들이는 방법의 아키텍처가 특이해서 인상이 깊었습니다.
Thanks
Hans
'Mobile Engineering' 카테고리의 다른 글
[Android] Koin Test로 테스트 코드 작성하기 (0) 2020.05.12 [Android] Koin vs Dagger2 (0) 2020.04.21 [Android] Koin으로 의존성 주입하기 (0) 2020.04.19 [Android] No static method metafactory (1) 2020.04.18 [Android] Http 통신을 로그로 기록하기 (0) 2020.04.18