이번 포스팅에서는 음악 플레이어의 service관련 클래스들을 리팩토링할 예정이다.
리팩토링 결과를 먼저 확인하고 리팩토링 과정을 공유할 예정이다.
AS-IS | TO-BE |
---|---|
![]() | ![]() |
AS-IS | TO-BE | |
---|---|---|
비교 | ![]() | ![]() |
문제점 및 해결책 1 | 의존성 강함, 확장성 적음 | Interface를 통해 의존성 제거, 확장성 증가 |
문제점 및 해결책 2 | 변수, 메소드 명이 명확하지 않음 | Renaming을 통해 명확화 |
문제점 및 해결책 3 | 직접 구현한 SeekbarThread 제거 | ScheduledExecutorService로 주기적으로 명령어 실행 |
override fun run() {
while (runFlag) {
for (observer in observers) {
observer.setCurrentProgress(currentStatus)
}
try {
Thread.sleep(1000)
} catch (e: InterruptedException) {
e.printStackTrace()
}
}
}
intervalExecutor?.scheduleAtFixedRate(
updateSeekBarPositionRunnable,
0L /*initialDelay*/,
REFRESH_INTERVAL_MS,
TimeUnit.MILLISECONDS
)
리팩토링 후 테스트 코드 및 디버그 로그 설정
@Test
fun setMedia_success() {
Whitebox.setInternalState(
audioPlayerController,
"player",
mockMediaPlayer
)
doReturn(false).whenever(mockMediaPlayer).isPlaying
audioPlayerController.play()
verify(mockNotificationService, times(1)).onStateChanged(
MediaAction.MEDIA_PLAY,
isChangedMediaByButton = false
)
verify(mockPlayEndViewActivity, times(1)).onStateChanged(
MediaAction.MEDIA_PLAY,
isChangedMediaByButton = false
)
}
테스트 코드 진짜 삽질 많이했다.
익숙해지지 않는 불편함에 좌절 ㅋㅋㅋ