ЕДИНЦИОННЫЕ Тесты с библиотекой Mockk не удаляются на CI, но каждый раз работает в локальномAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 ЕДИНЦИОННЫЕ Тесты с библиотекой Mockk не удаляются на CI, но каждый раз работает в локальном

Сообщение Anonymous »

Привет, у меня есть несколько модульных тестов для моего мультимодулярного проекта Android, и я хочу запустить конвейер CI с этими тестами, но, как говорится в заголовке, некоторые тесты, которые используют Mockk для насмешливых операций на сервере CI (используя Bitrise для Это с машиной Ubuntu 22.04), но каждый раз в любой ситуации работает на моей локальной машине (MB M1 Pro). Я провел много исследований, но ни один LLM там или какой -либо блог не мог помочь. Для репозиториев, которые также являются тем, почему модуль Im Mosing Usecases): < /p>

Код: Выделить всё

@OptIn(ExperimentalCoroutinesApi::class)
@ExtendWith(MainCoroutineExtension::class)
class DetailViewModelTest {
private lateinit var viewModel: DetailViewModel
private lateinit var getForecastUseCase: GetForecastUseCase
private lateinit var savedStateHandle: SavedStateHandle

@BeforeEach
fun setUp() {
getForecastUseCase = mockk(relaxed = true)
savedStateHandle = SavedStateHandle()
viewModel = DetailViewModel(getForecastUseCase, savedStateHandle)
}

@Test
fun `given viewModel when initialized then forecastState should be Loading`() = runTest {
assertThat(viewModel.forecastState.value).isEqualTo(ForecastState.Loading)
}

@Test
fun `given savedStateHandle with null values when fetching forecast then state should remain Loading`() =
runTest {
savedStateHandle[DetailViewModel.LATITUDE_ARG] = null
savedStateHandle[DetailViewModel.LONGITUDE_ARG] = null

every { getForecastUseCase.execute(any(), any()) } returns flowOf(dummyForecast)

viewModel.forecastState.test {
val firstItem = awaitItem()
assertThat(firstItem).isEqualTo(ForecastState.Loading)
expectNoEvents()
}
}
}

< /code>
(на Ci)
Здесь, первый тест всегда достигает успеха, но второй (который содержит сделки) >
Java.lang.nullPointerException: не может вызвать
"com.sevban.data.repository.weatherforecastrepository.getLocationWeath ... < /p>
< /blockquote>
Как вы можете видеть, что он жаловался на это. Измешивание класса GetForeCastUseCase 
, который использует репозиторий в качестве зависимости для выполнения запросов в API.
Что я пробовал? />
Я запускал повторяющиеся тесты тысячи раз, чтобы увидеть, являются ли они Flakky Tests или нет, но они никогда не провалились в моей локальной машине. < /p>
< / li>
Также я много раз чирил свой кэш Studio Android Android /> < /ul>
Есть ли какие -либо предложения, которые можно попробовать или это должно быть связано с проблемой о Bitrise? Заранее спасибо.

Подробнее здесь: https://stackoverflow.com/questions/794 ... e-in-local
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»