본문 바로가기

안드로이드

(35)
Android Espresso #4 - ActivityRules 이번에는 UI 테스트에서 사용하는 ActivityRule 에 대해서 설명할 것이다. Rule 에는 ActivityTestRule, ActivityScenarioRule 두 가지가 존재한다. 또, Rule 없이 사용하는 방법으로 ActivityScenario 가 존재한다. 구글은 ActivityScenarioRule 나 ActivityScenario 를 쓰기를 권장하고 있으니 해당 부분만 보아도 된다. TestRule 우선 Rule의 동작은 간단하다. @Before 단계 이전에 실행되며 @After 단계가 끝난 후 종료된다. @Before, @After 가 없으면 모든 @Test의 시작과 끝에 맞춰 실행된다. ActivityRule의 경우로 보면 @Before 단계 이전에 액티비티 Rule이 생성되고 @A..
Android Espresso #3 - RecyclerView 이번에는 RecyclerView 관련 액션을 지원하는 RecyclerViewActions에 대해 설명하고, 예제와 함께 RecyclerView의 UI 테스트를 작성하려 한다. 시작하기 androidTestImplementation 'androidx.test.espresso:espresso-contrib:3.2.0' "espresso-contrib" 라이브러리는 몇 가지 뷰에 대한 추가적인 Matcher와 Action 들을 제공한다. ( 당연히도 직접 구현해도 동일한 기능이 가능하다. ) 리사이클러뷰에서 사용할 Action 들도 추가가 되어있다. RecyclerViewActions RecyclerViewActions 가 바로 RecyclerView를 위해 추가된 Action이다. 총 6개의 Action 이..
Android Espresso #2 - ViewMatcher, ViewAction, ViewAssertion ViewMatchers, ViewActions, ViewAssertions에 포함된 함수들과 어떤 식으로 사용해야 하는지를 설명하고, 주의할 점들을 알아보려 한다. ViewMatchers 뷰의 상태와 Matcher 함수들을 모아 놓은 클래스이다. ViewMatchers는 뷰를 찾기 위해서도 ( onView ) 쓰고, 뷰의 상태를 확인하기 ( check ) 위해서도 사용한다. onView(withText("Welcome")) .check(matches(allOf(isDisplayed(),withText("Welcome")))) 위의 코드에서 사용된 withText, isDisplayed 같은 것들이 ViewMatcher이다. ViewMatchers안에는 몇십 개 이상의 함수가 있기에 모두 소개할 수 없고,..
Android Espresso #1 - 시작 Espresso? 간단하게 설명하면 안드로이드 UI 테스트를 위한 라이브러리이다. 간결한 코드로 화면 정보에 대한 어셜션을 진행할 수 있고, 테스트에 집중 할 수 있도록 백그라운드 실행에 대한 동기화는 에스프레소가 처리해준다. ※ 아래 과정을 진행하기 전에 Settings > Developer options으로 가서 애니메이션 관련 기능을 다 끄는 걸 권장합니다. ( 애니메이션이 도는 사이에 UI 테스트가 진행되어 원치 않은 결과가 나올 수 있습니다. ) 시작하기 android { ... defaultConfig { ... testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" // 이미 있음 } } dependencies { ... an..
[And] navigation #2 - 딥 링크 네비게이션 딥링크 네비게이션에서는 외부에서 발생하고 url 을 이용한 암시적 딥링크, 알림이나 위젯등 내부에서 발생하고 PendingIntent 을 이용한 명시적 딥링크 두 가지가 존재한다. 1. 암시적 딥링크 딥링크 생성하기 암시적 딥링크는 네비게이션 툴에서 추가 할 수 있으며, 코드로는 위와 같이 작성하면 추가가 가능하다. 위의 경우는 fragment121 화면으로 이동하기 위해 "page/fragment121" 라는 딥링크를 설정하였다. 네비게이션의 딥링크는 앞에 scheme ( http, https ) 을 자동으로 붙여준다. 주의 할 점은 "app://page/fragment121" 식으로 작성한다고 "app" 이 scheme 으로 설정되지는 않는다. scheme 은 무조건 http 아니면 htt..
[And] navigation #1 - 기본 사용법 Navigation? Navigation 은 Activity - Fragment 구조에서 빠질 수 없는 Transaction을 보다 쉽게 구현하기 위한 Jetpack Component이다. Transaction 외에서 애니메이션, 딥링크, 뷰 모델 공유들의 기능을 가지고 있다. 시작하기 -- project ------------ dependencies { classpath "androidx.navigation:navigation-safe-args-gradle-plugin:2.3.0-alpha06" } -- app ---------------- apply plugin: "androidx.navigation.safeargs.kotlin" dependencies { implementation "androidx..
안드로이드 paging 3.0 #2 - LoadState #1 에선 기본적인 Paging3을 구현하였고 여기선 Paging3 에서 LoadStateAdapter, LoadState 를 알아보려 한다. ( #1에 포함된 코드는 적지 않음. ) 시작하기 위의 예제를 만드어보려 한다. LoadState sealed class LoadState( val endOfPaginationReached: Boolean ) { ... class NotLoading( endOfPaginationReached: Boolean ) : LoadState(endOfPaginationReached) { ... } object Loading : LoadState(false) { ... } class Error( val error: Throwable ) : LoadState(false) { ..
안드로이드 Paging 3.0 #1 - 맛보기 Paging 라이브러리란? 페이징을 쉽게 구현하기 위해 안드로이드에서 제공하는 라이브러리이다. 최근 3.0 Alpha 버전이 릴리즈 되었단 걸 알게 되었다. Paging2와 변한 점 DataSource 관련 코드가 PagingSource 하나로 통합되었다. Header, Footer, separator를 넣을 수 있는 코드 (insertHeaderItem, insertFooterItem, insertSeparators)가 추가되었다. 로딩 처리를 쉽게 할 수 있다. 데이터 refresh 에 대한 처리가 추가되었다. 로딩 시 발생하는 에러 처리를 쉽게 할 수 있다. 더 이상 Config 생성 방식이 빌더 패턴이 아니다. 데이터의 캐싱이 가능하다. 위에 7가지 정도가 바뀌었다. 기존 Paging 보단 코드가..