Refactor - service packge
도입
이번 포스팅에서는 음악 플레이어의 service관련 클래스들을 리팩토링할 예정이다.
리팩토링 결과를 먼저 확인하고 리팩토링 과정을 공유할 예정이다.
결과
AS-IS | TO-BE |
---|---|
실습
Step1. Package 재구성 및 Rename
AS-IS | TO-BE | |
---|---|---|
비교 | ||
문제점 및 해결책 1 | 의존성 강함, 확장성 적음 | Interface를 통해 의존성 제거, 확장성 증가 |
문제점 및 해결책 2 | 변수, 메소드 명이 명확하지 않음 | Renaming을 통해 명확화 |
문제점 및 해결책 3 | 직접 구현한 SeekbarThread 제거 | ScheduledExecutorService로 주기적으로 명령어 실행 |
Step2. SeekbarThread -> ScheduledExecutorService로 변경'
- AS-IS
override fun run() {
while (runFlag) {
for (observer in observers) {
observer.setCurrentProgress(currentStatus)
}
try {
Thread.sleep(1000)
} catch (e: InterruptedException) {
e.printStackTrace()
}
}
}
- TO-BE
intervalExecutor?.scheduleAtFixedRate(
updateSeekBarPositionRunnable,
0L /*initialDelay*/,
REFRESH_INTERVAL_MS,
TimeUnit.MILLISECONDS
)
Step3. 테스트 코드 작성
리팩토링 후 테스트 코드 및 디버그 로그 설정
- AS-IS
@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
)
}
- Result
느낀점
테스트 코드 진짜 삽질 많이했다.
익숙해지지 않는 불편함에 좌절 ㅋㅋㅋ
Author And Source
이 문제에 관하여(Refactor - service packge), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@heepie/Refactor-service-packge저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)