Android Compose Instrumentation test to unit test

이미지
사용 버전: Android Studio Jellyfish 2023.3.1 안드로이드 컴포즈 Instrumentation test to unit test를 알아보겠습니다. Instrumentation(계측) test(테스트)라고 하면, 보통 UI(유아이) test를 말합니다. Unit(유닛) test는 보통 코드의 로직을 test 할 때 사용합니다. Instrumentation test의 단점은 emulator(에뮬레이터)나 실제 device(장치)가 있어야 한다는 점인데요. 이는 테스트의 속도를 떨어뜨리게 됩니다. 이러한 Instrumentation test를 emulator 없이 실행할 수 있게 해주는 것이 있습니다. 바로 Robolectric(로보레트릭)입니다. https://robolectric.org 이처럼 Unit test처럼 test 할 수 있게 해줍니다. 적용해 봅시다. 앱 용 Build.gradle로 갑니다. testOptions를 적어주고, unitTests 그리고 isIncludeAndroidResources를 true로 만들어 줍니다. libs.versions.toml robolectric을 정의합니다. 그리고 testImplementation을 적어줍니다. 여러분 프로젝트에 libs.versions.toml을 사용하지 않는다면, 예시처럼 org.robolectric:robolectric:4.12를 적어주시면 됩니다. 자, 그러면 이제 context가 필요해서 androdTest로 만들었던 것들을 그냥 test로 옮길 수 있게 됩니다. 옮길 대상은 database와 repository입니다. unitTest로 옮겨졌네요. 그다음 해야 할 것을 문서에서 보면, 아래처럼 RunWith를 추가해 주는 것입니다. RunWith(RobolectricTestRunner.class) 옮겨온 test class 위에 적어줍니다. 그리고 기존에 context를 가져오는 코드를 변경합니다. RuntimeEnvironment.getApplication().ap

Android Github action

이미지
안드로이드 Github action을 알아보겠습니다. Github(깃허브) action(액션)은 CI/CD를 제공해 줍니다. https://docs.github.com/en/actions 또한 Github에 적용하기 쉽게 만들어졌는데요. Public(오픈된) Repository(저장소)의 경우 무료로 제공해 줍니다. 오늘 한 번 적용해 봅시다. 적용할 제 repository는 여기입니다. https://github.com/Jaehwa-Noh/Project-Flight-Search-App/tree/compose-flight-search-app Github에 Actions를 누릅니다. 아래의 Simple workflow의 Config를 눌러줍니다. 그러면, 이러한 창이 나옵니다. Github action은 YAML을 읽고 실행합니다. 기본적인 뼈대가 작성되어 있는 상태네요. 이 파일은 .github/workflows에 생성됩니다. 파일 이름을 Build.yml로 3번째 줄의 name은 Build Demo로 변경했습니다. 이렇게 표시됩니다. run-name은 workflows run에 사용될 이름입니다. 이렇게 표시됩니다. on은 언제 github action을 작동시킬지를 정합니다. 여기서는 push와 pull request에 작동을 하는데, 그 목표가 main 일 때입니다. jobs는 현재 action flow에서 실행될 모든 작업들의 집합입니다. jobs 아래에 이름을 추가할 수도 있습니다. build_apk로 지어줬습니다. runs-on은 실행할 장비를 선택합니다. 저는 ubuntu 최신 버전을 사용합니다. steps에는 이제 실행될 작업들을 나눠서 적어줍니다. 각각의 내용들은 독립된 스크립트로 실행됩니다. uses는 github action이 repository의 code(코드)에 접근할 수 있게 해줍니다. 실행되면 이렇게 보입니다. 이것은 예제 코드이고, 여기서 이제 진짜 build(빌드)를 하도록 만들어봅시다. Android instrumentation

Android Version catalog

이미지
사용 버전: Android Studio Jellyfish 2023.3.1 안드로이드 Version catalog를 알아보겠습니다. Version catalog는 Multi module(멀티 모듈)에서 동일한 라이브러리로 관리하고 사용할 때 필요합니다. 현재는 app module뿐인 상태이지만, modularization(모듈화)을 적용할 계획이기 때문에 적용해 봅시다. settings.gardle.kts에 코드를 적어서 사용하는 방법과 libs.versions.toml 파일을 만들어서 사용하는 방법 두 가지가 있습니다. 여기서는 libs.versions.toml 파일을 만들어서 사용하는 방법을 알아보겠습니다. 생성부터 합시다. Project - gradle - New - Version Catalog를 눌러줍니다. libs로 만듭니다. libs.versions.toml 3가지 부분이 자동으로 만들어지네요. [versions], [libraries], [plugins]가 있습니다. versions에는 version의 정보를 적어줍니다. libraries에는 library를 적어주고, plugins에는 plugin을 적어줍니다. build.gradle.kts에 있는 것들을 libs.versions.toml로 옮겨줍니다. 기존의 것을 변경합니다. libs.versions.toml 이렇게 변경됩니다. app - build.gradle.kts 기존의 것을 변경합니다. 이렇게 변경됩니다. dependencies에 있는 것들은 대부분 library로 취급됩니다. 다행히 여기 있는 것들은 자동 완성을 지원해 주네요. libs.versions.toml 이렇게 module을 정의할 수도 있고, group과 name으로 나눠서 정의할 수도 있습니다. 짜잔. 완성입니다. 참고 프로젝트:  https://github.com/Jaehwa-Noh/Project-Flight-Search-App/tree/compose-flight-search-app 끝. 카테고리: Android

Android Compose Spotless

이미지
사용 언어: Kotlin 1.9.22 사용 버전: Android Studio Iguana 2023.2.1 Patch 1 안드로이드 컴포즈 Spotless를 알아보겠습니다. Spotless는 여러 명의 개발자가 작업할 때, Code(코드) convention(규칙)을 정하여 지키도록 할 때 사용합니다. 공식 레포지토리입니다. https://github.com/diffplug/spotless 여러 언어를 지원합니다. 사용법을 봅시다! https://github.com/diffplug/spotless/blob/main/plugin-gradle/README.md#quickstart Project 용 build.gradle에 id("com.diffplug.spotless") version "6.25.0"를 추가해 줍니다. Sync now를 눌러줍니다. App 용 build.gradle로 갑니다. plugins에 id("com.diffplug.spotless")를 적어줍니다. Sync now 후, 아래에 spotless를 적어줍니다. 아래 plugin 관련 문서가 있습니다. https://github.com/diffplug/spotless/tree/main/plugin-gradle 문서에서 Kotlin은 ktfmt, ktlint, diktat, prettier를 지원해 줍니다. 우리는 pinterest에서 만든 ktlint를 사용할 겁니다. https://github.com/pinterest/ktlint Quick start에 있는 것을 따라 해 봅시다. 우리의 app 용 build.gradle을 이렇게 만들어 줍니다. Sync now를 눌러주세요. 그 후, 몇몇 설정을 위해서  EditorConfig File을 만듭니다. Project를 선택하고, 우클릭 - New - EditorConfig File을 누릅니다. OK를 눌러줍니다. .editorconfig에 이렇게 적어줍니다. Terminal을 열어서 .\gradl