Cómo escribir la testing adecuada para el repository de interfaz reactiva que devuelve Observable solo cuando hay algún evento, cómo simular el desencadenamiento de ese evento

Estoy intentando escribir la testing adecuada para mi repository reactivo, que solo escucha los cambios de location. No quiero escuchar cambios de location y simplemente 'invocar' nuevos cambios de location varias veces con la location personalizada creada.

Aquí está el repository y su function para la recostackción de ubicaciones:

interface RxLocationRepository { @SuppressLint("MissingPermission") fun onLocationUpdate(): Observable<Location> fun stopLocationUpdates() } 

Aquí está la implementación, que en realidad NO IMPORTA porque no quiero escuchar actualizaciones de location reales, pero quiero mostrarle que es solo una implementación reactiva para escuchar las actualizaciones de LocationManager:

 class LocationNativeRepository( val locationManager: LocationManager, val geoEventsDistanceMeters: Int, val geoEventsIntervalSeconds: Int) : RxLocationRepository{ var locationToPopulate: Location = Location(LocationManager.GPS_PROVIDER) lateinit var mLocationCallbackNativeApi: LocationListener private val subject: BehaviorSubject<Location> = BehaviorSubject.createDefault(locationToPopulate) var locationEmitter: Observable<Location> = subject.hide() init { configureNativeLocationEmitter() } override fun onLocationUpdate(): Observable<Location> { return locationEmitter } @SuppressLint("MissingPermission") override fun stopLocationUpdates() { locationManager.removeUpdates(mLocationCallbackNativeApi) } @SuppressLint("MissingPermission") private fun configureNativeLocationEmitter() { mLocationCallbackNativeApi = object : LocationListener { override fun onLocationChanged(location: Location) { subject.onNext(location) } override fun onStatusChanged(provider: String, status: Int, extras: Bundle) {} override fun onProviderEnabled(provider: String) {} override fun onProviderDisabled(provider: String) {} } try { locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, (geoEventsIntervalSeconds * 1000).toLong(), geoEventsDistanceMeters.toFloat(), mLocationCallbackNativeApi, Looper.getMainLooper()) } catch (ignonetworking: IllegalArgumentException) { ignonetworking.printStackTrace() } try { locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, (geoEventsIntervalSeconds * 1000).toLong(), geoEventsDistanceMeters.toFloat(), mLocationCallbackNativeApi, Looper.getMainLooper()) } catch (ignonetworking: IllegalArgumentException) { ignonetworking.printStackTrace() } } } 

Entonces, ¿cómo puedo invocar este repository en mi testing para activar realmente el método onLocationUpdate ()? Entonces, por ejemplo, lo haré emitir 3 veces la location de esta manera:

  val location = Location("test").apply { latitude = 1.234 longitude = 5.678 accuracy = 20f time = Date().time }