Класс DataSource и тестирование Retrofit Unit с использованием сопрограмм и Mockito - PullRequest
2 голосов
/ 28 мая 2020

Привет, я пишу модульные тесты для своего репозитория и уровня данных в сетевом модуле, но при написании модульных тестов для моего уровня DataSource я получаю сообщение об ошибке от Mockito.

Класс SaltDataSource:

class SaltDataSource : BaseDataSource() {
/**
 * This method will get salt from server
 */
suspend fun getSalt(saltRequest: SaltRequest) =
    getResult { TMSService.instance.getSaltAsync(SALT_URL, saltRequest) }
}

Интерфейс модернизации службы TMS:

interface TMSService {

@POST
suspend fun postHeartBeatAsync(
    @Url url: String, @Header("Authorization") authToken: String,
    @Body
    heartBeatList: PostHeartBeat
):
        Response<HeartBeatResponse>

@POST
suspend fun getSaltAsync(@Url url: String, @Body saltRequest: SaltRequest):
        Response<SaltResponse>

companion object {
    //creating singleton object of TMSService
    val instance: TMSService by lazy {
        ApiClient.retrofitInstance.create(TMSService::class.java)
    }
}

}

SaltDataSourceTestClass:

/**
 * Unit Test class for SaltDataSource
 */
@RunWith(MockitoJUnitRunner::class)
class SaltDataSourceTest {

@Mock
private lateinit var tmsService: TMSService

@Mock
private lateinit var saltRequest: SaltRequest

private lateinit var saltDataSource: SaltDataSource

private lateinit var saltResponse: SaltResponse

@Before
fun beforeTest() {
    saltDataSource = SaltDataSource()
}

@Test
fun givenSaltRequest_whenGetSaltCalled_shouldCallGetSaltApi() {
    runBlocking {
        saltDataSource.getSalt(saltRequest)

        delay(2000)
        Mockito.verify(tmsService).getSaltAsync("url", saltRequest)
    }
}

}

Я получаю эту проблему при попытке подтвердить свой звонок с помощью Mockito:

Wanted but not invoked:
tmsService.getSaltAsync("url", saltRequest);

Я проверил журналы http и получаю ответ, т. Е. Вызывается этот метод.

...