UI Integration Testing - Android Instrumentation ref now in android app

29 Views Asked by At

Hello Everyone/Anyone,

While I am still finding my way around Android development, I have taken up the Now in Android Multi Module App as a reference point to implement a conceptual app. My current struggle lies in implementing the android instrumented test for my compose component(s).

Below are images of my [within the context of the issue here]

  1. app directory structure
  2. app classes/files

| Code Snippets | Folder Structure | | --- | --- | | code snippet diagram source https://www.websequencediagrams.com/cgi-bin/cdraw?lz=dGl0bGUgZGVtb19tdWx0aW1vZHVsZV9hbmRyb2lkX2FwcAphbHQgMTogc291cmNlOiBDb250YWN0VUlDb21wb25lbnRzLmt0LAAEE1Rlc3Qua3QKbm90ZSBsZWZ0IG9mIGFwcDoKQAA3BXNhYmxlIApmdW4ATQhBZGRyZXNzVVgoCiAgICBtb2RpZmllcjogTQADByA9AAIJLAAeBW9uU2hvd1NuYWNrYmFyOiBzdXNwZW5kIChTdHJpbmcsIAACBj8pIC0-IEJvb2xlYW4gPSB7IGEsIGIgLT4gZmFsc2UgfQBIBnJlZ2lzdGVyAIEBB0NhbGxiYWNrOiAoQ2VycHN5cwCBGgdEYXRhAE0FVW5pdCA9IHsAOQdjYWxsQmFjawCBQQdTYXZlZDogKAB4BQAwEgCBAwUARxIoKQCBBwhjAGgNVmlld01vZGVsOgA9DwAQCSA9IGhpbHQAIAkoKSwKKSB7AIJHBXZhbCBhAIEQB2VhcmNoUmVzdWx0VWlTdGF0ZSBieQBWGC4ALwdRdWVyeQAoBy5jb2xsZWN0QXMAOQVXaXRoTGlmZWN5Y2xlKCkAZwljYXNjYWRlAIIGCHRhdGUATSMAHBoAQjVDaXQAgS8IAEwqACoLAIFNHwCCVAlzYXZlZACFOQgAgjQiABwTAII3H2VuZCBub3RlAIZKBnJpZ2gAhkgJIApASGlsdEEAhzAGVGVzdApAVW5pbnN0YWxsTQCHTgVzAIZNBkRhdGEACwY6OmNsYXNzAIZBBkRhb3MAAhV0YWJhc2UAIw8pCgA2BQCHdxRUZXN0IHsAghAGQGdldDpSdWxlKG9yZACHNwUwAIQSCmhpbHRSdWxlID0gAIEwCwApBXRoaXMAglIHADESMQCEVAsAiEAFZVRlcwBCCGNyZWF0ZQCCAAcAiF4GZVJ1bGU8AIkjCUFjdGl2aXR5PigpIC8vTWFpbgAKCACBLQdCZWZvcmUAiHoFZnVuIHNldFVwKCkAhj4GICAgAIEvCS5pbmplY3QAhWcHAId4BQCBAQ4uc2V0Q29udGVudACGfAcAOwh2YWwgbmF2Q29udHJvbGwAiVEFcmVtZW1iZXJOAAwMAFILICAgAIg6CEVuZHZpc1RoZW1lAEoPICAgIE5hdkhvc3QoAFEQAGQNLCBzdGFydERlc3RpbmF0aW9uID0gImMAi1QGX2NhcmRfcm91dGUiAIFuCwCBNgwAgnQGYWJsZSgAIwUAEC4AgUcFAItcFQAWGACLWA4AiyYaAIEYFACCNg4Agz8IfQCCKBEABA4AFgoAJAYAKgYuLi4uAIZ-CmVuZCBhbHQAjhwFMgCOFgsAjB4NUgCMTgVyAIJgBVVzZUNhcwCHOgdvdmVyAI4IBgCGRgcAFyAgQEkAhG4FIGNvbnN0cnVjdG9yAI4iBnByaXZhdGUAim4GAG8PcG9zaXRvcnkAgQYSABIIAIwaCQCONAhvcGVyYXRvcgCFfAVpbnZva2UoZW50aXR5OiBMaXN0PACNfw5FABYFPgCGGQsAbBguAI5RDwBPByA9IABZBgCMNAZ9Cn0Agk4WMwCCShoAWQlrdCwAgVAZSW1wbACQfBQKaW50ZXJmYWNlAI8dCACRXQdEZXRhaWwAgjoKAIIZD2Z1bgCQKQkAkg4Ic2FnAIIdEABADACCJAgAgVgLAIQEBQCLQhIAg38XAIFADACDXTREYW8AhRASAJNVBkRhbwCSTgYAhEMMbmV0d29yazogAIhwBmNybU4ADAZEYXRhUwCUDgUAkwMGQACSGwdEaXNwYXRjaGVyKAAqCQAKCnMuSU8pAIUjDWlvACgKOiBDb3JvdXRpbmUAPQosCikAhSIaIHsKLi4uAII9EQCHEggAlTcFNACVMgoAjXQKLmt0LFRlc3QABQ0AhAgSQACONwYKQEkAjkYGSW4oU2luZ2xldG9uAJV3CQCOQwcpCmFic3RyYWN0IACOGQYAjmIKAJJ9B0BCaW5kcwCVVgUAhG4FbmFsIAArCWZ1biBiaW5kcwCHEBgAihkKAIdKGkRlZmF1bHQAh1IZAIoMBQCHcBsAiV4HAIZ2DACFCBIAgWctAJAkBgCCXQ4AggcIUHJvdmlkZQCCDAZAAIJQCQCOdAkAgWgnZGI6AIUVCXV4AJEsCACMCAoAhT0HAIUoCgCFLCIAlmwSAIYVJACFWDAAhVkjAIMSHwCQTwtyZXR1cm4Ag2IgKACHfhEsAIIOESwAhwgMAIsMCACNZRIAnBQFNQCGTw4AlCMKAIsFBQCGWggACg0Aim4SAJQoBQCGYwcAlDQFAIZJJQCbegViAI4NBQCVGg4AkmQLAIRVDgCEVBMAk2AIcACFBAcAhDYTAJENDkBBcHBsaWMAkjAFAJNaBXgAjwwFdGV4dACeFgZleHQAkQMKKQCKLgsAhREKID0gUm9vbS5kAJZYB0J1aWxkZQCPRgcAlEUKAD0PICAgADkUAJdBBy5qYXZhAAwhLkRBVEFCQVNFX05BTUUAgR0LLmJ1aWxkAJs1BwCDYgwAjQcSAIMiDACJciYAgx8HAIN8EgCYIggAkTkIbGF0ZWluaXQgdmFyAI0MLQCYagcAiDEgAINBJS8vAJpOBQCDXQsAh1MKAINUKQCDYhcAmD4KLy8AmT0GAIQ8Bj0AYwwAihAHci5nZXQAhFwSAJBMBWV4dD4AmHALdmFsIGRiID0gAIRSBmluTWVtb3J5AJs3CACEDVMAhCcKAIoWGiA9IGRiLgCVARAAkGQJAJowCwCJNQdkYgCIZQgAgyEtAKMMEG8oAJAfEwCRWwkAiiERAJIQEQCUfQkAiV0XNgCQRQwAnjAIAIllCwAICwCUWhIAkCQvAIlYCQCfGAgAnlQJAI4wDQCBdRoAgmUMAI4oCgCINAgAiQoUAJANGACUHQkgPQA4CQCDPSEAkD4UAJVaEwCBYDYAgmEOAGuBLwCCBRAAlScNNwCqZgoAizIUAJkxFACUbg8AjGMUOgCMcgUAjU8JAKgTCGNvbXBhbmlvbgCOSAcAmz4Lb25zdACoNgUAjCsNID0gImUAkmgKLWRiIgCeGgsAlUUNAIdjGwCLMxwAm28TAK0DBTgAnk0aAJk8CS5pdACEXAcAnlsICkBEYW8Am1QSAIVHEwCXIQcAqWcFKHZhbHUAoVYFU0VMRUNUICogRlJPTQCrDggAqkYHIFdIRVJFIFVQUEVSKACqWgdUZXh0KSBJTiAoOnF1ZXJ5VG9rZW5zKSIAqhQGZnVuIGZpbgCoJAhCABgHKAAgCzogQXJyYXk8AK0_Bj4pOiBGbG93PACeYxo-AIQxIjkAhEATAJs7ES5rAIIrEQovKioKICogSQCeHAlyZXByZXNlbnRpbmcAnBkIAK12BXMgdG8gdGhlIE5JQSBiYWNrZW5kCiAqLwCeVgsAnC0aAJ5KEwCCBSEAoQkFAIIcCQChEAxEYXRhAJ1RCACBeiMxMACxVwpGbGF2b3JlZACdYgcAnBQKAIIJEACbby5AVmlzaWJsZUZvclQApnMFZwCgbQsAXxUAqj8JAJwtCgCcHAkoaW1wbDogUmV0cm9maQCbaQgAnxUHAJRqDACfHhEKfQoAl0ILAKU8CQ&s=default | app structure diagram source

https://tree.nathanfriend.io/?s=(%27options!(%27fancy!true~fullPath!false~trailingSlash!true~rootDot!true)~source!(%27source!%27demo_multimodule_android_appJappJbuild-logicJcoreJ*...J*dataJYsrcBBXZ%2FnetworkB*diBYFlavoredNetworkQG10W*EndviscrmNetworkDataSourceG9%5DJ*dVOHVBYzDaosQG6WYzDVQG5WXHVBYdao%2FKsourceDao.kt%5B8WYEndviscrmuxDVG7WYDaosQG6WYDVQG5%5DJ*doXO%22zDataQ.kt*%5B4WX%22DataQG4WYreqBY*KqG3WY*CerpsysKqImplG3WYusecaseBY*KgistrationUseCaseG2%5DJfeatureJ*feature_1OLzG1WXLG1%5D%5Cn%27)~version!%271%27)*%20%20BJY*G.kt%20%5BH%2FjavaB*package%2FdJ%5Cn*KCerpsysAddressReLZB*ContactUIComponentsOJYsrcBandroidzQModuleVatabaseW%5DBXmainY**Z%2Fjava%2FpackageqpositoryzTest%22HoXBYdi%2F%01%22zqZYXWVQOLKJHGB* |

Issue:

When I attempt to build/compile the project, I get the hilt/dagger exceptions:

ContactUIComponentsTest_HiltComponents.java:151: error: [Dagger/MissingBinding] CerpsysAddressRepository cannot be provided without an @Provides-annotated method.
  public abstract static class SingletonC implements FragmentGetContextFix.FragmentGetContextFixEntryPoint,
                         ^
  
  Missing binding usage:
      CerpsysAddressRepository is injected at
          CerpsysAddressRegistrationUseCase(cerpsysAddressRepository)
      CerpsysAddressRegistrationUseCase is injected at
          CerpsysAddressViewModel(�, addressRegistrationUseCase, �)
      CerpsysAddressViewModel is injected at
          CerpsysAddressViewModel_HiltModules.BindsModule.binds(arg0)
      @dagger.hilt.android.internal.lifecycle.HiltViewModelMap java.util.Map<java.lang.String,javax.inject.Provider<androidx.lifecycle.ViewModel>> is requested at
          dagger.hilt.android.internal.lifecycle.HiltViewModelFactory.ViewModelFactoriesEntryPoint.getHiltViewModelMap() [dagger.hilt.android.internal.testing.root.ContactUIComponentsTest_HiltComponents.SingletonC ? dagger.hilt.android.internal.testing.root.ContactUIComponentsTest_HiltComponents.ActivityRetainedC ? dagger.hilt.android.internal.testing.root.ContactUIComponentsTest_HiltComponents.ViewModelC]
  It is also requested at:
      CerpsysAddressFuzzySearchUseCase(cerpsysAddressRepository)
      FindCerpsysAddressByInternalUUIDUseCase(cerpsysAddressRepository)

Note: when I remove all the test bindings classes e.g. TestDataModule.kt, my app runs fine.

From my implementation, I have initially used in my TestDataModule.kt

@Binds
@Singleton
abstract fun bindsCerpsysAddressRepository(
    cerpsysAddressRepository: DefaultCerpsysAddressRepository
): CerpsysAddressRepository

and changed to

@Provides
@Singleton
fun bindsCerpsysAddressRepository(
    db:EndviscrmuxDatabase,
    networkDataSource: EndviscrmNetworkDataSource,
    cerpsysAddressDao: CerpsysAddressResourceDao,
    @CerpsysDispatcher(EndviscrmDispatchers.IO) ioDispatcher: CoroutineDispatcher,
): CerpsysAddressRepository {

    return DefaultCerpsysAddressRepository(cerpsysAddressDao,networkDataSource,ioDispatcher)
}

but the compile time error persists.

Any guidance will be appreciated as I'm kind of stuck now.

0

There are 0 best solutions below