Android/TDD(Test Driven Development, 테스트 주도 개발) 썸네일형 리스트형 Dagger Hilt와 App Startup 조합 시 AndroidTest 불가능 TL; DR 2022-05-11, dagger 2.42, startup 1.20.0-alpha01 기준 불가능합니다. 문제 App Startup 적용 이후 AndroidTest(Instrumented Test)가 실행되지 않습니다. (debugger 무한 대기) Logcat을 보니 다음과 비슷한 오류가 찍힙니다. 2022-04-11 10:41:09.352 24409-24409/com.example.appstartupinstrumentationtest E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.appstartupinstrumentationtest, PID: 24409 java.lang.RuntimeException: Unable to get.. 더보기 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() } } .. 더보기 Turbine 없이 kotest에서 StateFlow, SharedFlow 테스트 하기, Unit Test 바쁜 분들 // state flow viewModel.emitStateFlow() viewModel.someStateFlow.first() shouldBe expected // shared flow launch { viewModel.emitSharedFlow() } viewModel.someSharedFlow.first() shouldBe expected 작성 사유(= 푸념) 새 프로젝트에서 LiveData의 대체제로 Flow를 쓰는데 (사유: Clean Architecture) 테스트 하기 까다롭다고 느꼈다. 기존 LiveData는 테스트 시 바로바로 값을 가져올 수 없어 구글에서 getOrAwaitValue라는 Work Around를 제공했다. fun LiveData.getOrAwaitValue( t.. 더보기 로버트 C. 마틴 TDD 3원칙 - TDD(Test Driven Development) TDD의 필요성 프로덕션 코드를 먼저 생성하고 이후 테스트 코드를 작성하는 방식에는 다음과 같은 문제점이 존재합니다. 요구사항을 명확히 규정하기 어렵습니다. 스스로 작성한 코드가 편향적일 수 있습니다. 모든 요구사항이 테스트 되었는지 확인할 수 없습니다. 지루합니다. 이러한 단점을 극복하기 위한 개발 방식이 테스트 주도 개발입니다. 테스트 주도 개발은 이름에서 느껴지는 것처럼, 테스트 코드를 먼저 작성하고 이를 만족하기 위한 프로덕션 코드를 생성하는 개발 과정을 의미하며, 이전 포스팅까지 우리는 입력을 여러 대표군으로 나누고, 이를 만족할 수 있는 테스트를 나열한 후, 모든 테스트를 만족하는 최소한의 코드를 작성하는 방식으로 TDD를 연습해왔습니다. 이러한 방식은 요구사항을 명확히 하고, 편향성을 극복할.. 더보기 Unit Test(유닛 테스트) 팁 5가지 - TDD(테스트 주도 개발) static method 제한적 사용 테스트 대상이 되는 함수 내부에서 static method를 사용한다면, 해당 부분은 Mocking 할 수 없습니다. 따라서 위 테스트와 마찬가지로 실행 환경에 영향을 받는 테스트를 작성하게 됩니다. singleton 및 object 제한적 사용 싱글톤 패턴이나 코틀린의 object를 사용하는 경우, 여러 테스트를 한 번에 테스트할 때 변수를 공유하기 때문에 문제가 발생할 수 있습니다. Object 개념과 Data Structure 개념 구분하여 사용 Object는 메소드 실행을 위한 클래스를 말하며, Data Structure는 데이터 저장을 위한 클래스를 말합니다. 코틀린에서는 Data Structure를 위해 Data Class를 사용하므로 둘을 구분하기 더욱 .. 더보기 Mockito 프레임워크 - TDD(테스트 주도 개발) 2021.12.14 - [Android/TDD(Test Driven Development, 테스트 주도 개발)] - Test Double Test Double 2021.12.10 - [Android+Kotlin+Figma] - Unit Test - TDD(Test Driven Development, 테스트 주도 개발) Unit Test - TDD(Test Driven Development, 테스트 주도 개발) 사담 안드로이드 개발의 기초적인 부분을 훑.. roomedia.tistory.com Mockito 이전 포스팅까지 우리는 Test Double 클래스를 직접 작성하였습니다. Mockito 프레임워크는 이러한 클래스 작성에 필요한 노력을 줄여주는 프레임워크입니다. 이번 포스팅에서는 두 가지 방식으로 .. 더보기 Test Double(테스트 더블) - TDD(테스트 주도 개발) 2021.12.10 - [Android+Kotlin+Figma] - Unit Test - TDD(Test Driven Development, 테스트 주도 개발) Unit Test - TDD(Test Driven Development, 테스트 주도 개발) 사담 안드로이드 개발의 기초적인 부분을 훑으면서, 어느 부분에 대해 테스트를 작성해야 하는지 구분이 모호하다고 생각했습니다. 이를테면 "버튼을 누르면 다음 화면으로 넘어가는 기능"은 roomedia.tistory.com Test Double의 필요성 이전 포스팅에서 단일 클래스를 대상으로 테스트 케이스를 작성하여 Unit Testing(유닛 테스트)을 진행하는 방법에 대해 살펴보았습니다. 이 경우 가장 조심해야 하는 부분은, 적절한 대표군을 선정하여 가능.. 더보기 Unit Test(유닛 테스트) - TDD(테스트 주도 개발) 사담 안드로이드 개발의 기초적인 부분을 훑으면서, 어느 부분에 대해 테스트를 작성해야 하는지 구분이 모호하다고 생각했습니다. 이를테면 "버튼을 누르면 다음 화면으로 넘어가는 기능"은 테스트가 필요할까요? "retrofit으로 api 요청을 보내고 응답을 받아오는 기능"은 어떨까요? 귀찮은데 테스트 안 하면 안 될까요? 그러한 고민을 해소하기 위해 udemy에서 TDD(Test Driven Development, 테스트 주도 개발) 강의를 들으며 요점을 정리해보았습니다. 수강 중인 강의는 아래에 안내하겠습니다. 109,000원짜리 강의이지만 udemy는 상시적으로 할인 행사를 진행하니 이를 잘 활용하면 80% 이상 할인 받을 수 있습니다. 끝으로, 이 글은 절대 완벽하지 않으며 보완이 필요한 내용은 댓글로.. 더보기 이전 1 다음