Cute Blue Flying Butterfly
본문 바로가기
CS/Kotlin

[Android Studio][Kotlin] Unit Test: Method ~ in ~ not mocked 문제 해결

by jordancancode 2024. 9. 29.

문제 상황

unit test를 위한 테스트 코드 작성 중 문제를 발견했다.

해당 코드를 실행했더니 다음과 같은 에러가 나왔다.

 

java.lang.RuntimeException: Method d in android.util.Log not mocked. See https://developer.android.com/r/studio-ui/build/not-mocked for details.

 

 

 

 

원인

해당 오류를 번역하면 다음과 같다.

"RuntimeException: <android.util.log> 클래스의 메서드 d는 테스트 환경에서 사용할 수 없습니다."

 

유닛 테스트 환경에서는 Android의 실제 기능을 사용할 수 없다. 따라서, d와 같이 android 환경에서 사용하는 메서드가 nutriDailyValue.carbs 속에 있기 때문에 이러한 오류가 발생한 것이다.

 

nutriDailyValue.carbs 속에 이런 코드가 있기 때문에 오류가 발생한 것

 

 

 

해결 : Robolectric으로  Android 환경 모킹하기

Robolectric은 Android의 실제환경을 테스트 환경에 모킹하여 유닛 테스트를 실행하게 해 주는 라이브러리이다.

이를 활용하면 테스트 환경에서도 Log 와 같은 기능을 사용할 수 있다.

 

1. 모듈수준 build.gradle에 테스트 의존성 추가하기

testImplementation("junit:junit:4.13.2")
testImplementation("org.robolectric:robolectric:4.13")

 

 

2024년 9월 기준 버전은 다음과 같지만, 깃허브에서 최신 버전을 확인하고 적용할 수 있다!

https://github.com/robolectric/robolectric

 

GitHub - robolectric/robolectric: Android Unit Testing Framework

Android Unit Testing Framework. Contribute to robolectric/robolectric development by creating an account on GitHub.

github.com

 

 

 

2. Test Class에 @RunWith(RobolectricTestRunner::class) 주석 추가하기

@RunWith(RobolectricTestRunner::class)
class NutriUnitTest {
    private lateinit var nutriDailyValue: NutrientDailyValues
    .
    .
    @Test
    fun userNutri_isCorrect() {
        assertEquals(5, nutriDailyValue.carbs.personalize().toString())
    }
    
}

 

 

 

결과

 

프로젝트의 데이터 클래스 이해가 안되는 부분이 있어 실패했지만...ㅋㅋ 그래도 구동은 성공했다.

반응형

'CS > Kotlin' 카테고리의 다른 글

[MVVM] LiveData  (0) 2024.11.12