Android

    [Android/Testing] #9. Dagger-Hilt 적용하여 프레그먼트 테스트하기

    [Android/Testing] #9. Dagger-Hilt 적용하여 프레그먼트 테스트하기

    프레그먼트는 앱에서 재사용할 수 있는 컨테이너 역할을 하는 컴포넌트로 프레그먼트를 사용하면 다양한 Activity와 Layout 구성에서 일관된 사용자 인터페이스 레이아웃을 사용자에게 더욱 쉽게 제공할 수 있다. 용도가 다양한 프레그먼트를 고려하면 프래그먼트가 일관되고 리소스 효율적인 환경을 제공하는지 검증하는 것이 중요하다. 프레그먼트 테스트 시에는 AndroidX의 'fragment-testing' 라이브러리를 사용하여 테스트를 진행한다. fragment-testing 라이브러리는 프레그먼트 테스트 시 도움을 받을 수 있는 FragmentScenario 클래스를 지원한다. 해당 클래스는 프레그먼트의 생성과 Lifecycle.State 변경을 지원한다. 2022년 11월 15일 기준 fragment-t..

    [Android/Testing] #8. 테스트에 Dagger-Hilt 적용해보기

    [Android/Testing] #8. 테스트에 Dagger-Hilt 적용해보기

    Dagger-Hilt(이하 Hilt)와 같은 DI(Dependency Injection, 의존성 주입) 프레임워크를 사용하여 얻을 수 있는 장점 중 하나는 코드를 더 쉽게 테스트할 수 있다는 점이다. 테스트하려는 각 컴포넌트, 모듈들은 독립적으로 테스트 되어야 한다. 하지만 각 컴포넌트 들은 상호간의 관계, 즉 의존성을 가지고 각자의 역할을 수행하거나 필요한 역할을 상대에게 위임하게 된다. 테스트 시에는 이런 역할을 수행할 의존성 대상을 직접 생성할 수도 있지만, 의존성 주입 프레임워크인 Hilt를 사용하여 좀 더 쉽고 빠르게 의존성을 주입하여 테스트를 간편화 할 수 있다. 이번 글에서는 테스트 시 Hilt를 적용하는 방법 중 간단한 내용에 대해 정리하고자 한다. 그 후 Hilt를 이용한 Testing ..

    [Android] MutableFlowState의 원자성 보장

    [Android] MutableFlowState의 원자성 보장

    정리하기 앞서 안드로이드 클린 아키텍처에 관해 공부 및 코드 분석을 진행하던 중 궁금한 부분이 생겼다. UI와 ViewModel의 상태를 data class와 MutableStateFlow를 겹합하여 상태를 관리하는 구조를 확인할 수 있었다. Data class는 copy 함수를 제공하여 클래스의 프로퍼티들을 하나 이상을 동시에 업데이트하면서 업데이트 하지 않는 나머지 값은 보존할 수 있는 기능을 제공한다. 이 때, 구글 안드로이트 팀에서 제공하는 클린 아키텍처 예제코드에서 MutableStateFlow에 결합된 data class의 프로퍼티를 value가 아닌 update 함수를 이용하는 것을 확인할 수 있었다. data class AddEditTaskUiState( val title: String =..

    [Android/Testing] #7. ViewModel 테스트하기 (with Fake Repository)

    [Android/Testing] #7. ViewModel 테스트하기 (with Fake Repository)

    ViewModel을 테스트해보자. 테스트 완성 코드는 아래 경로를 참조하자. https://github.com/linuxias/Android-Testing/tree/testing_viewmodel/Setup_For_Testing GitHub - linuxias/Android-Testing Contribute to linuxias/Android-Testing development by creating an account on GitHub. github.com 들어가기 앞서 원래 테스트의 목적은 테스트주도개발(Test Driven Development) 방법론을 사용한 개발 시 비지니스 로직과 함께 테스트를 작성하며 프로젝트를 완성해 나아가는 것이다. 하지만 블로그 정리 시 그러한 과정을 하나하나 설명하기에..

    ViewModel의 DataEvent 처리 방법 #1. LiveData

    ViewModel의 DataEvent 처리 방법 #1. LiveData

    LiveData란? (간략히 정리하기) LiveData는 관찰가능한(Observable) 데이터 홀더 클래스이다. 안드로이드 클린 아키텍처로 MVVM(Model-View-ViewModel)을 지향하고 있다. MVVM 아키텍처에서 VIewModel과 View의 데이터 이벤트 처리방식으로 LiveData를 많이 이용한다. 관찰가능한 다른 클래스와 다르게 LiveData는 액티비티, 프레그먼트, 서비스 등의 라이프사이클을 인지하여 활성화 상태(여기서 활성화만 START 또는 RESUME 상태이다) 인 경우에만 데이터를 업데이트 한다. 이전에 LiveData가 아닌 직접 구현하여 사용하였던 방식을 편하게 사용할 수 있게 되었다. LiveData의 observe() 함수형은 아래와 같다. 첫 인자로 Lifecyc..

    [Android/Testing] #6. 테스트 시작 전에 테스트 더블(Test Double) 이해하기

    [Android/Testing] #6. 테스트 시작 전에 테스트 더블(Test Double) 이해하기

    테스트 더블(Test Double)의 유래? 영화 촬영에서 배우를 대신하는 스턴트맨을 들어 본 적이 있을 것이다. 스턴트맨의 또 다른 이름이 스턴트 더블이다. 영화나 드라마에서, 무술 장면이나 실제 배우가 출연하기 힘든 위험한 장면을 촬영할 때 그 분야에 전문적으로 숙달되어 있는 사람을 고용하는데, 이들을 스턴트맨이라고 부른다. 출처 : https://namu.wiki/w/%EC%8A%A4%ED%84%B4%ED%8A%B8%EB%A7%A8 테스트 더블이란 용어는 xUnit Test Patterns의 저자인 제라드 메스자로스(Gerard Meszaros)가 처음 사용한 용어이다. 테스트 더블은 스턴트 더블에서 유래되었다. 테스트를 위해 시스템의 필요한 부분은 실제 배우가 아닌 스턴트 배우처럼 테스트 더블이란..