본문 바로가기

Android/오류해결

[Android] Robolectric 을 활용한 유닛테스트

resources 에서 가져온 스트링값, 서버에서 내려준 필드를 조합하여 특정 스트링을 만드는 클래스가 있는데 이에 대한 유닛테스트 코드를 짜려고 한다.

유닛테스트에서는 안드로이드 프레임워크에 의존성이 있는 클래스들을 참조할 수 없다. 이유는 그냥 Robolectric 검색하면 다양한 포스팅이 있으니 참고할 것.

아무튼 위와 같은 이유로 resources 참조를 위해 Robolectric 을 사용하면서 나온 빌드 에러, 해결방법 등을 대충 정리해두려고 한다. (발견하면 추가할 것)

 

오류1) 빌드 실패

Failed to transform artifact 'bcprov-jdk15on.jar (org.bouncycastle:bcprov-jdk15on:1.68)' to match attributes {artifactType=android-classes, org.gradle.usage=java-runtime-jars}
  • 해결방법 : android.enableJetifier=false 또는 android.jetifier.blacklist=bcprov 설정하기 (gradle.properties)
  • jetifier 란? 동등한 AndroidX 패키지를 대신 사용할 수 있도록 지원 라이브러리에 종속된 라이브러리를 이전. 이 도구를 사용하면 안스와 함께 번들로 제공되는 Android Gradle 플러그인을 사용하는 대신, 개별 라이브러리를 직접 이전할 수 있음.
    • android.enableJetifier=false : 서포트 라이브러리 사용하는 부분이 있을 경우 기존 프로젝트 빌드가 안될 수 있음

 

오류2) 빌드 성공, 런타임 오류

android/app/ApplicationExitInfo java.lang.NoClassDefFoundError: android/app/ApplicationExitInfo at java.base/java.lang.Class.getDeclaredMethods0(Native Method) at java.base/java.lang.Class.privateGetDeclaredMethods(Class.java:3166) at java.base/java.lang.Class.getDeclaredMethod(Class.java:2473) at org.robolectric.internal.bytecode.ShadowWrangler.findShadowMethodDeclaredOnClass(ShadowWrangler.java:319)
  • 해결방법 : 그냥 4.6 → 4.6.1 로 버전 올리니까 해결됨