I'm trying to implement a generic spy class to be used in tests for interfaces derived from a base UseCase interface... is there any way to make the spies generic? Or does one have to be made for each derived interface? (See thread for code)
dave08
05/04/2021, 1:42 PM
Copy code
interface ResultUseCase<in Request : Any, out Response> : UseCase<Request, Result<Response, DomainError>> {
override suspend fun invoke(request: Request): Result<Response, DomainError>
}
dave08
05/04/2021, 1:43 PM
Copy code
interface UseCase<in Request : Any, out Response> {
suspend operator fun invoke(request: Request): Response?
}
dave08
05/04/2021, 1:43 PM
Copy code
class ResultUseCaseSpy<Request : Any, Response>(
var block: (suspend (Request) -> Result<Response, DomainError>)? = null
): ResultUseCase<Request, Response> {
var request: Request? = null
private set
override suspend fun invoke(request: Request): Result<Response, DomainError> {
this.request = request
return block?.invoke(request) ?: error("No response provided for $request.")
}
}