Android
[codelab 5.2 - 4, 5 ,6 ,7] Repository Unit Test (Fake Datasource with DI)
우리가 일부 클래스(혹은 함수, 함수 모음등)에 대한 단위(unit)테스트를 수행할때 목표는 해당 클래스의 코드만 테스트하는것입니다. 하지만 특정 클래스의 코드만 작성하는것은 매우 까다롭습니다. 그 이유를 Repository 클래스를 예로들어 살펴보겠습니다. 목표는 해당 클래스의 코드 만 테스트하는 것인데 Repository는 작동하기 위해 LocalDataSource 및 RemoteDataSource와 같은 다른 클래스에 의존합니다. 다시말해 LocalTaskDataSource 및 RemoteTaskDataSource가 DefaultTaskRepository의 종속되어 있다는 것입니다. (DataSource are dependencies of Repository) DefaultTasksRepositor..
[codelab 5.2 - 3]Testing Strategy - 테스트 전략 개념 소개(테스트 피라미드, )
이 코드 랩에서는 test doubles 과 dependency injection을 사용하여 repositories, view models, fragments를 테스팅하는 방법을 배웁니다. 그전에 이러한 테스트를 작성하기위해 무엇을 어떻게 해야하는지 가이드하는 방법론을 이해하는 것이 중요합니다. 이 섹션에서는 Android에 적용되는 일반적인 테스트 모범 사례를 다룹니다. The Testing Pyramid 테스트 전략에 대해 생각할때 다음 3가지 관점에서 살펴볼수 있습니다. 범위Scope — 테스트는 얼마나 많은 코드를 다루나요? 테스트는 단일 메서드, 전체 애플리케이션 또는 그 중간 어딘가에서 실행할 수 있습니다. 속도Speed — 테스트는 얼마나 빨리 실행됩니까? 테스트 속도는 밀리 초에서 몇 분까..
[codelab 5.1 -8 9 10]AndroidX 테스트로 ViewModel(LiveData 관찰되는지) 테스트
CodeLab 05.1 Testing Basics 목차 (Task 8) [ViewModel]테스트 (Task 9) [LiveData] 테스트 (Task 10) multiple [ViewModel]테스트 이번코드랩에서는 대부분의 앱에서 공통적으로 사용되는 두 가지 Android 클래스(ViewModel & LiveData)에 대한 테스트를 작성하는 방법을 배웁니다. Task 8 : AndroidX 테스트로 ViewModel 테스트 설정 Setting up a ViewModel Test with AndroidX Test ViewModel에 모든 로직이 있고 Repository에 의존하지 않는 테스트를 수행하려 합니다. Repository 코드에는 테스트를 더 복잡하게하는 '비동기 코드', '데이터베이스' 및..
[codelab 5.1 - 5 6 7] Android Test 종류, [일반 클래스] Local Unit Test, TDD
CodeLab 05.1 Testing Basics 목차 (Task 5)Source sets : 계측(Instrumented) Test / 로컬(Local) Test (Task 6) [일반 클래스]를 로컬 단위 테스트(Local Unit Test) 하기 (Task 7) 테스트 주도 개발(TDD) 체험하기 1) 안드로이드에서 테스트의 기초를 학습함을 목표로 합니다. Android에서 단위 테스트를 작성하고 실행하는 방법 테스트 주도 개발(TDD)을 사용하는 방법 계측 테스트(instrumented tests) 및 로컬 테스트(local tests)를 선택하는 방법 2) 학습하게 될 라이브러리 JUnit4 햄크레스트(Hamcrest) AndroidX 테스트 라이브러리 AndroidX Architecture 구..
내부(innter)클래스 중첩(nested)클래스 그리고 메모리 누수
java에서는 A클래스 안에 B클래스를 정의하면 안에 정의된 B클래스는 자동으로 내부클래스가 됩니다. java에서 객체가 삭제되는 시점은 객체가 더 이상 사용되지 않을때입니다. 내부클래스에서는 외부클래스를 항상 참조하고있습니다. 따라서 A클래스가 삭제되더라도 내부클래스인 B 클래스는 삭제되지않고 살아있게되어 (원하는 시점에 적절하게 객체가 삭제되지 못함) 메모리 누수가 발생하기됩니다. (그래서 실제 프로젝트에서 내부클래스로 개발되었던 코드들을 모두 수정했습니다.) 더보기 Inner Class Reference 관련 해결방법 1. 내부 클래스의 정적 변수를 만들지 말자 2. 클래스를 정적으로 설정해야 한다. 익명 클래스의 인스턴스는 "static"인 경우 외부 클래스에 대한 암시 적 참조를 보유하지 않습니..
[Android AdapterView] : ListView, RecyclerView
Adapter View 개발자는 화면의 다양한 View 들을 배치해 화면을 구성하게 된다. 대부분의 뷰들은 배치를 하면 기본적으로 정해진 속성에 따라 모양이 구성된다. 하지만 일부 View 들은 스스로 결정할 수 없는 부분이 있어 개발자가 반드시 데이터를 설정해야만 구성이 가능하다. 이렇게 개발자가 반드시 설정해야 화면을 구성할 수 있는 View 들을 가르켜 Adapter View라고 부른다. Adapter Class Adapter View 들은 View 구성하기 위해서 개발자가 다양한 데이터를 설정해줘야 한다. 이러한 데이터를 관리하는 Class 를 Adapter Class라고 부른다. Adapter Class는 사용 목적이나 적용할 View 에 따라 다양하게 제공되고 있으며 원한다면 직접 생성해서 사..