Android 썸네일형 리스트형 kotest Project Config 다른 모듈과 공유 Unit Test를 하다보면 Dispatchers.Main을 사용하는 코루틴과 문제가 발생하는 경우가 잦다. kotest에서는 이를 다음과 같이 Project Config를 사용하여 해결한다. object KotestConfig : AbstractProjectConfig() { private val testDispatcher = UnconfinedTestDispatcher() override suspend fun beforeProject() { super.beforeProject() Dispatchers.setMain(testDispatcher) } override suspend fun afterProject() { super.afterProject() Dispatchers.resetMain() } } .. 더보기 Unit Test(유닛 테스트) - TDD(테스트 주도 개발) 사담 안드로이드 개발의 기초적인 부분을 훑으면서, 어느 부분에 대해 테스트를 작성해야 하는지 구분이 모호하다고 생각했습니다. 이를테면 "버튼을 누르면 다음 화면으로 넘어가는 기능"은 테스트가 필요할까요? "retrofit으로 api 요청을 보내고 응답을 받아오는 기능"은 어떨까요? 귀찮은데 테스트 안 하면 안 될까요? 그러한 고민을 해소하기 위해 udemy에서 TDD(Test Driven Development, 테스트 주도 개발) 강의를 들으며 요점을 정리해보았습니다. 수강 중인 강의는 아래에 안내하겠습니다. 109,000원짜리 강의이지만 udemy는 상시적으로 할인 행사를 진행하니 이를 잘 활용하면 80% 이상 할인 받을 수 있습니다. 끝으로, 이 글은 절대 완벽하지 않으며 보완이 필요한 내용은 댓글로.. 더보기 error: [Hilt] Expected @AndroidEntryPoint to have a value. Did you forget to apply the Gradle Plugin? error: [Hilt] public final class HiltTestActivity extends androidx.appcompat.app.AppCompatActivity { ^ Expected @AndroidEntryPoint to have a value. Did you forget to apply the Gradle Plugin? (dagger.hilt.android.plugin) See https://dagger.dev/hilt/gradle-setup.html [Hilt] Processing did not complete. See error above for details. Dagger Hilt를 포함한 뒤 테스트 코드를 작성하다 다음과 같은 에러를 마주쳤습니다. 이전까지는 문제 없이 사용하고.. 더보기 안드로이드 RoomDatabase in Java 이전에도 Room에 관해 글을 쓴 적이 있었지만, 여전히 이해가 가지 않는 부분이 있어 보충 설명을 위해 글을 작성합니다... Kotlin 이슈 7 Room 사용하여 안드로이드 로컬 db 시작하기 위시리스트를 저장하고 싶어! 안드로이드 어플에 데이터를 저장하는 방법은 여러가지가 있지만, 저는 서버가 없는 관계로 로컬 db인 SQLite를 사용하기로 했습니다. Room 은 SQLite 성능을 최대화하 roomedia.tistory.com RoomDatabase 소개 RoomDatabase는 DB 생성, 쿼리 등에 필요한 모든 작업을 캡슐화 해놓은 라이브러리로, Entity(Table), SQLite(Database), DAO(Data Access Object)로 구성되어 있으며, 쿼리에 대한 runtime.. 더보기 안드로이드 데이터 바인딩 in Java Hello World! TextView label = findViewById(R.id.textview); label.setText("Hello World!"); findViewById(...) 안드로이드를 처음 배울 때 제일 많이 사용한 구문입니다. 그러나! 해당 구문은 레이아웃 파일이 커질수록, 찾는 요소가 많아질수록 비용이 커지기 때문에 사용하지 말아야 합니다... 내부적으로 findViewById(...) 구문은 다음과 같이 작용합니다. 안드로이드는 매번 findViewById(...) 구문이 호출될 때마다 레이아웃 파일 트리를 순회하며 해당하는 요소를 찾습니다. 그러니 레이아웃 파일이 많아지거나 찾는 요소가 많아질수록 시간이 늘어날 수 밖에 없는 구조이지요. 구글 엔지니어들은 Data Bindin.. 더보기 Jsoup Coroutine Warning: Inappropriate blocking method call - 안드로이드 이슈 12 안녕하세요~ 오늘은 마주친 찝찝한 에러, Inappropriate blocking method call과 해결법에 대해 글을 써보려고 합니다. 먼저 이전에 사용하던 Volley 대신 Jsoup을 사용하게 된 이유부터 말씀드릴게요. 이번 프로젝트를 진행하면서, Volley의 불편함과 한계를 느꼈습니다. 파싱이 안되는 건 정규 표현식을 이용해 어찌저찌 해결했지만, 307 에러를 해결하지 못하더라고요. 때문에 크롤링과 파싱을 간편하게 Jsoup을 이용해 해결했는데요. 처음 작성한 코드는 다음과 같습니다. 이때 get() 부분에 warning이 발생합니다. warinig의 내용은 Inappropriate blocking method call인데요. 이를 이해하기 위해선 먼저 blocking과 non-blocki.. 더보기 이전 1 다음