일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 스택 자바 코드
- ar vr 차이
- 자바 다형성
- rxjava disposable
- 안드로이드 유닛 테스트 예시
- 안드로이드 유닛 테스트
- 멤버변수
- 서비스 쓰레드 차이
- Rxjava Observable
- 안드로이드 레트로핏 crud
- rxjava hot observable
- 객체
- 스택 큐 차이
- ANR이란
- 플러터 설치 2022
- 2022 플러터 안드로이드 스튜디오
- 안드로이드 os 구조
- jvm이란
- 서비스 vs 쓰레드
- 클래스
- 안드로이드 레트로핏 사용법
- rxjava cold observable
- android retrofit login
- 안드로이드 라이선스 종류
- 안드로이드 라이선스
- android ar 개발
- 큐 자바 코드
- 2022 플러터 설치
- jvm 작동 원리
- 안드로이드 유닛테스트란
- Today
- Total
나만을 위한 블로그
[Android] 단위 테스트 작성 시 Method d in android.util.Log not mocked 에러 해결 본문
[Android] 단위 테스트 작성 시 Method d in android.util.Log not mocked 에러 해결
참깨빵위에참깨빵 2023. 8. 7. 19:48※ 이 포스팅은 Mockito가 아닌 MockK를 사용했을 경우를 바탕으로 작성됐다
뷰모델에 만든 함수들을 대상으로 애써 테스트를 작성한 후, 성공하는지 확인하려고 테스트를 실행하면 가끔 아래와 같은 에러가 발생할 수 있다.
Method d in android.util.Log not mocked.
android.util.Log 클래스의 d()가 mock되지 않았단 뜻이다. d를 쓰지 않았다면 w, i, e가 될 수도 있는데, 이 에러가 발생하는 이유는 순수 JUnit 프레임워크와 코틀린으로 작성한 테스트가 아니라 Log나 Uri 같이 안드로이드 프레임워크(android로 시작하는 패키지)에 속하는 클래스들을 단위 테스트에서 사용하려면 mock 객체를 만들어 사용해야 한다.
그런데 그런 처리 없이 뷰모델에 로그를 심어둔 채로 테스트를 작성하고 실행하면 저 에러가 발생하면서 테스트가 실패하는 것이다.
이 문제의 해결법은 그리 어렵지 않다. 저 에러 메시지가 표시되지 않도록 Log 클래스를 mocking하면 된다.
아래와 같이 BaseTest를 작성할 수 있다.
import android.util.Log
import io.mockk.every
import io.mockk.mockkStatic
open class BaseTest {
fun mockLogClass() {
mockkStatic(Log::class)
every { Log.v(any(), any()) } returns 0
every { Log.d(any(), any()) } returns 0
every { Log.i(any(), any()) } returns 0
every { Log.e(any(), any()) } returns 0
}
}
mockLogClass()는 테스트 파일의 @Before가 붙은 함수 안에 선언하면 된다.
이후 테스트를 작성한 클래스에서 BaseTest 클래스를 상속한 다음 @Before가 붙은 함수 안에 선언만 해 주면 필요한 처리는 끝난다. 이렇게 하면 앞으로 Log 클래스를 mock해야 한다는 에러는 더 이상 발생하지 않는다.
@RunWith(JUnit4::class)
class FooViewModelTest: BaseTest() {
@Before
fun setUp() {
mockLogClass()
.
.
.
}
.
.
.
}
참고한 사이트)
https://stackoverflow.com/questions/36787449/how-to-mock-method-e-in-log
'Android' 카테고리의 다른 글
[Android] 안드로이드 OS 변천사 정리(롤리팝~안드로이드 13) - 2 - (0) | 2023.08.10 |
---|---|
[Android] 안드로이드 OS 변천사 정리(롤리팝~안드로이드 13) - 1 - (0) | 2023.08.07 |
[Android] 웹뷰 브릿지 통신 시 Java exception was raised during method invocation 에러 해결법 (0) | 2023.08.02 |
[Android] 버전 코드는 이미 사용되었습니다. 다른 버전 코드를 사용해 보세요 경고 대응 (0) | 2023.07.29 |
[Android] 레트로핏으로 서버에 이미지 전송하는 법 (0) | 2023.07.29 |