Я использую сопрограммы kotlin и модифицированные сопрограммы kotlin для выполнения сетевых запросов в проекте, над которым я сейчас работаю. Но я не могу понять, как сделать мои юнит-тесты для прохождения логики.
Вот мой код:
class WorklistInteractor @Inject
constructor(private val worklistRepository: WorklistRepository,
private val preferenceManager: PreferenceManager)
: NetworkInteractor, WorklistDialogContract.Interactor {
private var job = Job()
override fun getWorklist(listener: OnWorklistResultListener) {
job = launch(UI) {
val result = async {
worklistRepository.getWorklist(
ip = preferenceManager.worklistIp,
port = preferenceManager.worklistPort).awaitResult()
}.await()
when (result) {
//Successful HTTP result
is Result.Ok -> listener.onWorklistResult(result.value)
// Any HTTP error
is Result.Error -> {
Timber.e(result.exception, "HTTP error with code %s}", result.exception.code())
when(result.exception.code()) {
401 -> listener.onInvalidCredentialsFailure()
500 -> listener.internalServerError()
503 -> listener.noServerResponseFailure()
else -> listener.onError(result.exception.cause.toString())
}
}
// Exception while request invocation
is Result.Exception -> {
Timber.e(result.exception.cause, "Exception with cause %s", result.exception.cause.toString())
when(result.exception) {
is ConnectException -> listener.connectionRefused()
is SocketTimeoutException -> listener.failedToConnectToHost()
else -> listener.onError(result.exception.cause.toString())
}
}
}
}
}
override fun cancel() {
job.cancel()
}
}
Вот один из моих юниттестов:
@Test
fun `when worklistquery returns result, pass result back through listeners onWorklistResult`()
= runBlocking {
whenever(mWorklistRepositoryMock.getWorklist(anyString(), anyInt(), anyString()))
.thenReturn(Calls.response(expectedWorklistResult))
mInteractor.getWorklist(mOnWorklistResultListenerMock)
verify(mOnWorklistResultListenerMock).onWorklistResult(expectedWorklistResult)
verifyNoMoreInteractions(mOnWorklistResultListenerMock)
}
Я продолжаю получать следующее сообщение при запуске:
Требуются, но не вызываются: onWorklistResultListener.onWorklistResult(); -> в com.example.dialogs.worklistdialog.WorklistInteractorTest$, когда worklistquery возвращает результат, передать результат обратно через прослушиватели OnWorklistResult()$1.doResume(WorklistInteractorTest.kt:58)
На самом деле с этим макетом не было никаких взаимодействий.