We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
안드로이드 클래스를 디버그하기 위해서는 실행환경의 안드로이드 버전과 compile 또는 target sdk 버전이 일치해야 한다.
sharedTest 공유 폴더 생성 및 java 소스 패키지 생서
build.gradle 에서 각 테스트 sourceSets 에 새로 추가된 공유 폴더 패키지 추가
Main Dispatcher 는 Looper 를 필요로 하는데, jvm 환경에서는 지원되지 않는듯. 이를 해결하기 위해서 다음과 같이 rule 을 정의할 수 있다.
@ExperimentalCoroutinesApi class MainCoroutineRule( private val dispatcher: CoroutineDispatcher = TestCoroutineDispatcher() ) : TestWatcher(), TestCoroutineScope by TestCoroutineScope(dispatcher) { override fun starting(description: Description?) { super.starting(description) Dispatchers.setMain(dispatcher) } override fun finished(description: Description?) { super.finished(description) Dispatchers.resetMain() } }
그 다음 테스트 클래스에 다음과 같이 rule 을 적용하면 Dispatchers.Main 이 test dispatcher 로 변환되어 사용된다.
@ExperimentalCoroutinesApi class ShoppingViewModelTest { @get:Rule var instantTaskExecutorRule = InstantTaskExecutorRule() @get:Rule var mainCoroutineRule = MainCoroutineRule() ... }
다음 의존성 추가
// For Robolectric tests. testImplementation("com.google.dagger:hilt-android-testing:2.38.1") // ...with Kotlin. kaptTest("com.google.dagger:hilt-android-compiler:2.38.1") // For instrumented tests. androidTestImplementation("com.google.dagger:hilt-android-testing:2.38.1") // ...with Kotlin. kaptAndroidTest("com.google.dagger:hilt-android-compiler:2.38.1")
HiltTestApplication 을 사용하기 위해서 TestRunner 클래스 정의
class HiltTestRunner : AndroidJUnitRunner() { override fun newApplication( cl: ClassLoader?, className: String?, context: Context? ): Application { return super.newApplication(cl, HiltTestApplication::class.java.name, context) } }
새로 정의한 HiltTestRunner 를 사용하도록 build.gradle 파일 수정
android { compileSdkVersion 30 buildToolsVersion "29.0.3" defaultConfig { applicationId "com.androiddevs.shoppinglisttestingyt" minSdkVersion 21 targetSdkVersion 30 versionCode 1 versionName "1.0" // 새로 추가한 TestRunner 설정 testInstrumentationRunner "com.androiddevs.shoppinglisttestingyt.HiltTestRunner" buildConfigField("String", "API_KEY", API_KEY) } ... }
테스트 패키지에 테스트용 모듈 클래스 정의
@Module @InstallIn(SingletonComponent::class) object TestAppModule { @Provides @Named("test_db") fun provideInMemoryDb(@ApplicationContext context: Context) = Room.inMemoryDatabaseBuilder(context, ShoppingItemDatabase::class.java) .allowMainThreadQueries() .build() }
테스트 클래스에 다음과 같이 설정
@ExperimentalCoroutinesApi @SmallTest @HiltAndroidTest // 어노테이션 설정 class ShoppingDaoTest { @get:Rule var hiltRule = HiltAndroidRule(this) // hilt rule 추가 @get:Rule val instantTaskExecutorRule = InstantTaskExecutorRule() @Inject @Named("test_db") // 주입할 의존성 어노테이션 추가 lateinit var database: ShoppingItemDatabase private lateinit var shoppingDao: ShoppingDao @Before fun setup() { hiltRule.inject() // 의존성 주입 코드 추가 shoppingDao = database.shoppingDao() } @After fun cleanUp() { database.close() } ... }
The text was updated successfully, but these errors were encountered:
No branches or pull requests
Debug
안드로이드 클래스를 디버그하기 위해서는 실행환경의 안드로이드 버전과 compile 또는 target sdk 버전이 일치해야 한다.
androidTest, test 폴더간 코드 공유
sharedTest 공유 폴더 생성 및 java 소스 패키지 생서
build.gradle 에서 각 테스트 sourceSets 에 새로 추가된 공유 폴더 패키지 추가
테스트 코드에서 Dispatchers.Main 에러 처리
Main Dispatcher 는 Looper 를 필요로 하는데, jvm 환경에서는 지원되지 않는듯. 이를 해결하기 위해서 다음과 같이 rule 을 정의할 수 있다.
그 다음 테스트 클래스에 다음과 같이 rule 을 적용하면 Dispatchers.Main 이 test dispatcher 로 변환되어 사용된다.
Hilt 를 통해서 테스트 의존성 주입
다음 의존성 추가
HiltTestApplication 을 사용하기 위해서 TestRunner 클래스 정의
새로 정의한 HiltTestRunner 를 사용하도록 build.gradle 파일 수정
테스트 패키지에 테스트용 모듈 클래스 정의
테스트 클래스에 다음과 같이 설정
The text was updated successfully, but these errors were encountered: